General0826 @ 2024-10-22 19:05:29
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=5e5+5,P=998244353;
struct dian{
ll num,x,w;
}sxf[N];
ll l,r,m,n,op,x,w;
ll lu[N],a[N],que[N],sum[N],cs[N],yux[N],mt[N],inc[N],inf[N],k,qj;
vector<ll> c[N],f[N];
ll q_pow(ll a,ll b){ //快速幂 T
ll num=a,cnt=1,op=b;
return a;
while(b){
if(b&1) cnt=1ll*(cnt*num)%P;
num=1ll*(num*num)%P;
b>>=1;
}
}
void tfort(vector<ll> c[],ll inc[]){ //T
l=1,r=0;
for(ll i=1;i<=m;i++){
sum[i]=sxf[i].num;
if(inc[i]==0){
que[++r]=i;
}
}
//将一个函数的基本贡献算上 T
while(l<=r){
ll v=que[l];
for(auto i:c[v]){
if(inc[i]!=0){
--inc[i];
sum[i]=(sum[v]*sum[i])%P;
//转移
if(inc[i]==0){
que[++r]=i;
}
}
}
l++;
}
}
void topsort(ll inc[]){
memset(cs,0,sizeof(cs));
l=1,r=1;
que[1]=m+1;
cs[m+1]=sum[m+1]=1; // 将m+1加入
while(l<=r){
ll v=que[l],mk=cs[v];
lu[sxf[v].x]=(lu[sxf[v].x]+(sxf[v].w*cs[v])%P)%P;
//将对单点的贡献算上
for(ll i=(ll)(c[v].size())-1;i>=0;i--){
ll nxt=c[v][i];
if(inc[nxt]!=0){
//
inc[nxt]--;
if(inc[nxt]==0){
que[++r]=nxt;
} //top部分
// yux[nxt]+=yux[v]; //将使用次数加上
cs[nxt]=(cs[nxt]+mk)%P;//将后缀乘加上
mk=(mk*sum[nxt])%P;
//算出 他对后缀乘的贡献
}
}
if(l==1) //全局贡献
qj=mk;
l++;
}
}
int main(){
cin>>n;
for(ll i=1;i<=n;i++)
cin>>a[i];
cin>>m;
for(ll i=1;i<=m;i++){
cin>>op;
if(op==1){
cin>>x>>w;
sxf[i]=(dian){1,x,w};
}
else if(op==2){
cin>>w;
sxf[i]=(dian){w,0,0};
}
else{
cin>>x;
sxf[i]=(dian){1,0,0};
for(ll j=1;j<=x;j++){
cin>>w;
c[i].emplace_back(w); //正边
inc[w]++;
f[w].emplace_back(i); //反边
inf[i]++;
}
}
}
// 输入
tfort(f,inf);
//反向top,算出每个函数对积的贡献
cin>>k;
for(ll i=1;i<=k;i++){
cin>>x;
c[m+1].emplace_back(x);
inc[x]++;
}
//输入,并建边将m+1(main)当做一个函数处理
// for(lli=0;i<=m;i++){
// cout<<'^'<<i<<' '<<sum[i]<<'\n';
// for(llj=0 ;j<c[i].size();j++){
// cout<<c[i][j]<<' ';
// }cout<<'\n';
// }
topsort(inc);
//处理
for(ll i=1;i<=n;i++){
cout<<(a[i]*qj%P+lu[i])%P<<' ';
}
//输出
return 0;
}
// cout<<v<<' '<<sum[v]<<'\n';
// cout<<v<<' '<<yux[v]<<' '<<cs[v]<<'\n';
// if(sxf[v].w *cs[v]*yux[v]!=0){
// cout<<sxf[v].w *cs[v]*yux[v]<<" "<<sxf[v].x<<'\n';
// }
/*
*/
by ycyxh1 @ 2024-10-22 19:24:11
如果遇到困难就gengen呼救
by ycyxh1 @ 2024-10-22 19:24:25
@huyangmu
by Igunareo @ 2024-10-22 19:52:03
莱德,需要我们
by liyifan202201 @ 2024-10-22 20:00:07
@General0826 莱德需要我们
by liyifan202201 @ 2024-10-22 20:01:52
@General0826 你的topsort,开始只加了m+1,还有一些没加的点,导致topsort直接爆炸
by General0826 @ 2024-10-22 20:02:18
@liyifan202201 thx,我试试
by General0826 @ 2024-10-22 20:03:50
@liyifan202201 非常感谢以A