为什么会WA(求助)
查看原帖
为什么会WA(求助)
77615
OIerAlbedo楼主2021/3/9 19:28
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF=998244353;
int cnt,n,m,i,oooo,T;
int a[200000],b[200000],d[200000],f[200000],opt[200000],u[200000],f4[3000000];
unsigned long long f1[1000000],p1[1000000],p2[1000000],c[1000000],e[1000000],f3[1000000];
unsigned long long kk,x,pp,fa;
void add(int x,int y)
{
	cnt++;a[cnt]=y;b[cnt]=d[x];d[x]=cnt;f[y]++;
}
void sc1(int x,int fa)
{
	if (opt[x]==2) f1[x]=p2[x];else f1[x]=1;
	for (int i=d[x];i;i=b[i])
	     {
	     	if (a[i]!=fa)
	     	    {
	     	    sc1(a[i],x);
				 f1[x]=(f1[x]*f1[a[i]]) % INF;	
				 }
		 }
}
/* void sc2(int x,int fa)
{
	long long kk=1;
	int t=1,w=1;
	f4[1]=i;
	while (t<=w)
	    {
	    	kk=1;
	    	for (i=d[f4[t]];i;i=b[i])
	    	     {
	    	     	f3[a[i]]=(f3[a[i]]+f3[f4[t]]*kk) % INF;
		       	kk=(kk*f1[a[i]]) % INF;
		       	f[a[i]]--;
		       	if (f[a[i]]==0)
		       	   {
		       	   	w++;f4[w]=a[i];
					  }
				 }
	    	t++;
		}
	for (int i=d[x];i;i=b[i])
	      {
	       if (a[i]!=fa)
		       {
		       	if (x==2) cout<<f3
		       	f3[a[i]]=(f3[a[i]]+f3[x]*kk) % INF;
		       	kk=(kk*f1[a[i]]) % INF;
		       	sc2(a[i],x);
				   }	
		  }
} */
int main()
{
	ios::sync_with_stdio(0);cin.tie();cout.tie();
	cin>>n;
	for (i=1;i<=n;i++) cin>>e[i];
	cin>>m;
	for (i=1;i<=m;i++)
	     {
	     	cin>>opt[i];
	     	if (opt[i]==1) cin>>p1[i]>>p2[i];
	     	else if (opt[i]==2) cin>>p2[i];
	     	else
	     	    {
	     	    	int oooo;
	     	    	cin>>oooo;
	     	    	while (oooo) { cin>>x;add(i,x);oooo--;}
				 }
		 }
	for (i=1;i<=n;i++)
	    if (f[i]==0)
	        sc1(i,0);
	cin>>T;
	for (i=1;i<=T;i++) cin>>u[i];
	pp=1;
	for (i=T;i>=1;i--)
	     {
	     	x=u[i];f3[x]=(f3[x]+pp) % INF;
	     	pp=(pp*f1[x]) % INF;
		 }
	int t=1,w=1;
	for (i=1;i<=n;i++)
	    {	
	    if (f[i]==0) 
	       {
	       	w++;f4[w]=i;
		   }
	    }
	kk=1;
	while (t<=w)
	    {
	    	kk=1;
	    	for (i=d[f4[t]];i;i=b[i])
	    	     {
	    	     	f3[a[i]]=(f3[a[i]]+f3[f4[t]]*kk) % INF;
		       	kk=(kk*f1[a[i]]) % INF;
		       	f[a[i]]--;
		       	if (f[a[i]]==0)
		       	   {
		       	   	w++;f4[w]=a[i];
					  }
				 }
	    	t++;
		}
	for (i=1;i<=n;i++) e[i]=(e[i]*pp) % INF;
	for (i=1;i<=m;i++)
	    if (opt[i]==1)
	       e[p1[i]]=(e[p1[i]]+f3[i]*p2[i] % INF) % INF;
	for (i=1;i<=n;i++) cout<<e[i]<<" ";
	return 0;
}

为什么会WA

2021/3/9 19:28
加载中...