CSP2020洛谷P7077:函数调用
生活随笔
收集整理的這篇文章主要介紹了
CSP2020洛谷P7077:函数调用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
解析
沒做出來…
qwq
自己只能想到拓撲開vector把每個函數(shù)搞成一個奇怪的加法標記和乘法標記的結(jié)合
極限數(shù)據(jù)卡一卡還是nm的
得分純玄學(xué)qwq
本題的關(guān)鍵是乘法相當于把函數(shù)調(diào)用多次
這樣就可以利用和全是加法類似的策略拓撲統(tǒng)計每個函數(shù)的調(diào)用次數(shù)
使問題得以解決
要注意部分分的提示性!(尤其是特殊限制)
代碼
#include<bits/stdc++.h> using namespace std; #define ll long long const int N=1e5+100; const int mod=998244353; inline ll read() {ll x=0ull,f=1ull;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return f*x; } int n,m; struct node{int to,nxt; }p[N*10]; int fi[N],cnt; inline void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;return; } ll mul[N],tim[N],a[N],add[N]; int du[N],pl[N]; int q[N],st,ed; bool vis[N]; ll find(int x){if(vis[x]) return mul[x];vis[x]=1;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;(mul[x]*=find(to))%=mod;}return mul[x]; } void topu(){st=1;ed=0;for(int i=1;i<=m;i++){if(!du[i]) q[++ed]=i;}while(st<=ed){int x=q[st++];//printf("x=%d tim=%lld\n",x,tim[x]);ll now=1;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;(tim[to]+=tim[x]*now)%=mod;(now*=mul[to])%=mod;--du[to];if(!du[to]){q[++ed]=to;}}}return; } int o[N]; int main(){//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);memset(fi,-1,sizeof(fi));cnt=-1;n=read();for(int i=1;i<=n;i++) a[i]=read();m=read();for(int i=1;i<=m;i++){int t=read();if(t==1){pl[i]=read();add[i]=read();mul[i]=1;}else if(t==2) mul[i]=read();else{mul[i]=1;int k=read();for(int j=1;j<=k;j++) o[j]=read();for(int j=1;j<=k;j++){du[o[j]]++;addline(i,o[j]);}}}for(int i=1;i<=m;i++){if(!vis[i]) find(i);//printf("i=%d mul=%lld\n",i,mul[i]);}int qq=read();for(int i=1;i<=qq;i++) o[i]=read();ll now=1;//printf("ok");for(int i=qq;i>=1;i--){(tim[o[i]]+=now)%=mod;(now*=mul[o[i]])%=mod;}for(int i=1;i<=n;i++) a[i]=a[i]*now%mod;topu();for(int i=1;i<=m;i++){(a[pl[i]]+=tim[i]*add[i])%=mod;}for(int i=1;i<=n;i++) printf("%lld ",a[i]); } /* 8 6 1 1 0 1 1 0 1 7 2 7 3 7 7 8 4 8 5 8 6 8 */總結(jié)
以上是生活随笔為你收集整理的CSP2020洛谷P7077:函数调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平安节祝福语简短
- 下一篇: CSP2019洛谷P5666:树的重心