QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#883072 | #10038. Centrifuge | lgvc# | WA | 0ms | 12116kb | C++23 | 2.7kb | 2025-02-05 14:37:43 | 2025-02-05 14:37:43 |
Judging History
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'