QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#883072#10038. Centrifugelgvc#WA 0ms12116kbC++232.7kb2025-02-05 14:37:432025-02-05 14:37:43

Judging History

This is the latest submission verdict.

  • [2025-02-05 14:37:43]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 12116kb
  • [2025-02-05 14:37:43]
  • Submitted

answer

#include <bits/stdc++.h>
#define MOD 998244353
inline int pw(int a,int b) {
    int as=1;
    while(b) {
        if(b&1) as=1ll*as*a%MOD;
        a=1ll*a*a%MOD;
        b>>=1;
    }
    return as;
}
inline int ni(int a) {
    return pw(a,MOD-2);
}
int N,a[200009],dg[200009],hd[200009],to[400009],nxt[400009],dp1[200009],
dp2[200009],v2[200009],k,siz[200009],b[200009],dp5[200009],dp6[200009];
void l(int u,int v) {
    to[++k]=v;nxt[k]=hd[u];hd[u]=k;
}
void dfs(int n,int f) {
    siz[n]=1;
    for(int i=hd[n];i;i=nxt[i]) {
        if(to[i]==f) continue;
        dfs(to[i],n);
        siz[n]+=siz[to[i]];
    }
    dp1[n]=1ll*siz[n]*a[n]%MOD;
    dp5[n]=b[n];
    for(int i=hd[n];i;i=nxt[i]) {
        if(to[i]==f) continue;
        dp1[n]=(dp1[n]+dp1[to[i]])%MOD;
        dp5[n]=(dp5[n]+dp5[to[i]])%MOD;
    }
    dp1[n]=1ll*dp1[n]*v2[n]%MOD;
    dp5[n]=1ll*dp5[n]*v2[n]%MOD;
}
void dfs2(int n,int f) {
    int su=0,su2=0,su3=0;
    for(int i=hd[n];i;i=nxt[i]) {
        if(to[i]==f) continue;
        su=(su+dp1[to[i]])%MOD;
        su3=(su3+dp5[to[i]])%MOD;
    }
    for(int i=hd[n];i;i=nxt[i]) {
        if(to[i]==f) continue;
        dp2[to[i]]=(dp2[to[i]]+1ll*v2[to[i]]*dp2[n])%MOD;
        dp2[to[i]]=(dp2[to[i]]+1ll*v2[to[i]]*v2[n]%MOD*a[n]%MOD*(N-siz[to[i]]))%MOD;
        dp2[to[i]]=(dp2[to[i]]+1ll*v2[to[i]]*v2[n]%MOD*
            (su-dp1[to[i]]+MOD))%MOD;
    }
    for(int i=hd[n];i;i=nxt[i]) {
        if(to[i]==f) continue;
        dp6[to[i]]=(dp6[to[i]]+1ll*v2[to[i]]*dp6[n])%MOD;
        dp6[to[i]]=(dp6[to[i]]+1ll*v2[to[i]]*v2[n]%MOD*b[n])%MOD;
        dp6[to[i]]=(dp6[to[i]]+1ll*v2[to[i]]*v2[n]%MOD*(su3-dp5[to[i]]+MOD))%MOD;
    }
    for(int i=hd[n];i;i=nxt[i]) {
        if(to[i]==f) continue;
        dfs2(to[i],n);
    }
}
signed main(void) {
    scanf("%d",&N);
    for(int i=1;i<=N;i++) {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<N;i++) {
        int u,v;
        scanf("%d %d",&u,&v);
        dg[u]++;
        dg[v]++;
        l(u,v),l(v,u);
    }
    for(int i=1;i<=N;i++) {
        a[i]%=MOD;
        b[i]=a[i];
        if(dg[i]>=2) v2[i]=ni(dg[i]-1),b[i]=1ll*(MOD-b[i])*ni(dg[i])%MOD;
        else v2[i]=1,b[i]=0;
    }
    int rt=1;
    dfs(rt,0);
    dfs2(rt,0);
    for(int i=1;i<=N;i++) {
        int va1=(dp2[i]+dp1[i])%MOD;
       // va2=0;
      //  printf("%d\n",va1);
        int va3=(dp5[i]+dp6[i])%MOD;
       // printf("%d %d\n",va1,va3);
        //printf("%d %d %d\n",va1,va2,va3);
        int va2=(va1+va3)%MOD;
        va2=(va2-a[i]+MOD)%MOD;
        va2=(va2+1ll*a[i]*(N-siz[i]))%MOD;
        va2=1ll*ni(N)*va2%MOD;
        if(dg[i]>1) va2=0;
        printf("%d\n",va2);
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 12116kb

input:

3
1 2 4
1 2
2 3

output:

3
0
4

result:

ok 3 number(s): "3 0 4"

Test #2:

score: 0
Accepted
time: 0ms
memory: 12116kb

input:

6
4 1 3 11 7 2
1 4
2 3
6 2
2 4
4 5

output:

928921837
0
818005794
0
679360751
568444705

result:

ok 6 numbers

Test #3:

score: -100
Wrong Answer
time: 0ms
memory: 10068kb

input:

1
41

output:

0

result:

wrong answer 1st numbers differ - expected: '41', found: '0'