p7077函数调用
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5,mod=998244353;
int a[N],con[N];
int p[N],v[N],t[N];
int cnt[N],f[N],dp[N],mem[N],carr[N],degr[N];
vector<int> c[N];
void DP(int x){
// cout<<x<<" ";
if(mem[x])return;
mem[x]=1;
dp[x]=1;
if(t[x]==1)return;
if(t[x]==2){
dp[x]=v[x];
return;
}
for(int i=0;i<cnt[x];i++){
DP(c[x][i]);
dp[x]=(dp[x]*dp[c[x][i]])%mod;
}
return;
}
void cary(int x){
// cout<<x<<" "<<carr[x]<<endl;
if(carr[x]==0)return;
if(t[x]==2)return;
if(t[x]==1){
con[p[x]]=(con[p[x]]+v[x]*carr[x])%mod;
carr[x]=0;
return;
}
long long vv=1;
for(int i=cnt[x]-1;i>=0;i--){
carr[c[x][i]]+=vv*carr[x];
carr[c[x][i]]%=mod;
degr[c[x][i]]--;
if(degr[c[x][i]]==0)cary(c[x][i]);
vv*=dp[c[x][i]];
vv%=mod;
}
carr[x]=0;
return;
}
signed main(){
int n,m,q;
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];
if(t[i]==2)cin>>v[i];
if(t[i]==3){
cin>>cnt[i];
for(int j=0;j<cnt[i];j++){
int ty;
cin>>ty;
c[i].push_back(ty);
degr[ty]++;
}
}
}
cin>>q;
for(int i=1;i<=q;i++)cin>>f[i];
for(int i=1;i<=m;i++)DP(i);
int V=1;
for(int i=q;i>=1;i--){
carr[f[i]]+=V;
V*=dp[f[i]];
V%=mod;
}
for(int i=1;i<=m;i++){
if(degr[i]==0)cary(i);
}
for(int i=1;i<=n;i++){
con[i]+=a[i]*V;
con[i]%=mod;
cout<<con[i]<<" ";
}
return 0;
}