为什么会WA(求助)

P7077 [CSP-S2020] 函数调用

OIerAlbedo @ 2021-03-09 19:28:02

#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


|