MnZn刚学OI 1e-18s求调
查看原帖
MnZn刚学OI 1e-18s求调
1248522
mlvx楼主2024/6/5 14:23

样例不过30pts

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,mod=998244353;
int n,m,T,cnt,now=1,a[N],t[N],p[N],v[N],c[N],mul[N],sum[N],r[N],vis[N],id[N],b[N];vector<int>g[N];queue<int>q;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>t[i];
		if(t[i]==1)cin>>p[i]>>v[i],mul[i]=1;
		if(t[i]==2)cin>>mul[i];
		if(t[i]==3){
			cin>>c[i],mul[i]=1;
			for(int j=1,x;j<=c[i];j++)cin>>x,g[i].push_back(x),r[x]++;
		}
	}for(int i=1;i<=m;i++)if(!r[i])q.push(i);
	while(!q.empty()){
		int x=q.front();q.pop(),id[++cnt]=x;
		for(auto i:g[x])if(!(--r[i]))q.push(i);
	}for(int i=m;i;i--){
		int x=id[i];
		for(int y:g[x])mul[x]=1ll*mul[x]*mul[y]%mod;
	}cin>>T;
	for(int i=1;i<=T;i++)cin>>b[i];
	for(int i=T,x;i;i--)x=b[i],sum[x]=(sum[x]+now)%mod,now=1ll*now*mul[x]%mod;
	for(int i=1;i<=m;i++){
		int x=id[i],now=1;
		for(int y:g[x])sum[y]=(sum[y]+1ll*sum[x]*now)%mod,now=1ll*now*mul[y]%mod;
	}for(int i=1;i<=n;i++)a[i]=1ll*a[i]*now%mod;
	for(int i=1;i<=m;i++)if(t[i]==1)a[p[i]]=(a[p[i]]+1ll*v[i]*sum[i])%mod;
	for(int i=1;i<=n;i++)cout<<a[i]<<' ';
	return 0;
}
2024/6/5 14:23
加载中...