RT,只过了 #5 和 #12,其他全 WA,求万能的谷民帮我调一调吧/kel
#include<queue>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int mod=998344353;
int n,a[100005],m;
struct func
{
int opt,p,v,mul,num;
}t[100005];
int Q,f[100005];
struct graph
{
int tot;
int hd[100005];
int nxt[1000005],to[1000005];
void add(int u,int v)
{
nxt[++tot]=hd[u];
hd[u]=tot;
to[tot]=v;
return ;
}
}g;
int in[100005];
queue<int>q;
int cnt,top[100005];
int mult=1;
void topsort()
{
for(int i=1;i<=m;i++)
if(!in[i]) q.push(i);
while(!q.empty())
{
int x=q.front();
q.pop();
top[++cnt]=x;
for(int i=g.hd[x];i;i=g.nxt[i])
if(!--in[g.to[i]]) q.push(g.to[i]);
}
return ;
}
void getmul()
{
for(int i=m;i>=1;i--)
for(int j=g.hd[top[i]];j;j=g.nxt[j])
t[top[i]].mul=1ll*t[top[i]].mul*t[g.to[j]].mul%mod;
return ;
}
void getsum()
{
for(int i=1;i<=m;i++)
{
int multt=1;
for(int j=g.hd[top[i]];j;j=g.nxt[j])
{
t[g.to[j]].num=(t[g.to[j]].num+t[top[i]].num*multt%mod)%mod;
multt=1ll*multt*t[g.to[j]].mul%mod;
}
}
return ;
}
signed main()
{
// freopen("call3.in","r",stdin);
// freopen("call.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
scanf("%lld",&m);
for(int i=1;i<=m;i++)
{
scanf("%lld",&t[i].opt);
if(t[i].opt==1) scanf("%lld%lld",&t[i].p,&t[i].v),t[i].mul=1;
else if(t[i].opt==2) scanf("%lld",&t[i].mul);
else
{
t[i].mul=1;
int len;
scanf("%lld",&len);
for(int j=1;j<=len;j++)
{
int x;
scanf("%lld",&x);
g.add(i,x);
in[x]++;
}
}
}
topsort();
getmul();
scanf("%lld",&Q);
for(int i=1;i<=Q;i++) scanf("%lld",&f[i]);
for(int i=Q;i>=1;i--)
{
t[f[i]].num=(t[f[i]].num+mult)%mod;
mult=1ll*mult*t[f[i]].mul%mod;
}
getsum();
for(int i=1;i<=n;i++) a[i]=a[i]*mult%mod;
for(int i=1;i<=m;i++)
if(t[i].opt==1)
a[t[i].p]=(a[t[i].p]+t[i].v*t[i].num%mod)%mod;
for(int i=1;i<=n;i++) printf("%lld ",a[i]);
return 0;
}