QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#880645 | #10038. Centrifuge | Nana7 | WA | 39ms | 11852kb | C++20 | 1.8kb | 2025-02-03 16:34:04 | 2025-02-03 16:34:04 |
Judging History
answer
#include<bits/stdc++.h>
#define I inline
#define int long long
using namespace std;
const int mod = 998244353;
const int N = 200100;
vector<int> q[N];
int n,a[N],inv[N],up[N],dn[N],rt,sz[N];
/*
3
1 2 4
1 2
2 3
6
4 1 3 11 7 2
1 4
2 3
6 2
2 4
4 5
*/
int qpow(int x,int y) {
if(y==0) return 1;
if(y==1) return x;
int mk=qpow(x,y/2);
return y%2?mk*mk%mod*x%mod:mk*mk%mod;
}
void dfs1(int x,int fa) {
sz[x]=1;
int du=q[x].size(),son=du;
if(x!=rt) son--;
for(auto t:q[x]) {
if(t==fa) continue;
dfs1(t,x);
sz[x]+=sz[t];
up[x]+=up[t]*inv[du-1];
up[x]+=sz[t]*a[x]%mod*inv[n]%mod*inv[du-1]%mod;
up[x]%=mod;
}
up[x]+=inv[n]*a[x]%mod*inv[du]%mod;
up[x]%=mod;
}
void dfs2(int x,int fa) {
int du=q[x].size(),son=du,sm=0;
if(x!=rt) son--;
int invs=inv[son],invd=inv[du];
for(auto t:q[x]) {
if(t==fa) continue;
sm+=up[t]; sm%=mod;
}
for(auto t:q[x]) {
if(t==fa) continue;
dn[t]=dn[x]*invs%mod;
dn[t]+=(sm-up[t]+mod)%mod*inv[du-1]%mod;
dn[t]+=inv[n]*a[x]%mod*invd%mod+(n-sz[t]-1)*inv[n]%mod*a[x]%mod*inv[du-1]%mod;
dn[t]%=mod;
dfs2(t,x);
}
}
I void solve() {
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1;i<n;++i) {
int x,y; cin>>x>>y;
q[x].push_back(y);
q[y].push_back(x);
}
if(n==2) {
cout<<(a[1]+a[2])*inv[n]%mod<<endl;
cout<<(a[1]+a[2])*inv[n]%mod<<endl;
return ;
}
if(n==1) {
cout<<a[1]<<endl;
}
rt=1;
for(int i=1;i<=n;++i) if(q[i].size()>q[rt].size()) rt=i;
dfs1(rt,0);
dfs2(rt,0);
for(int i=1;i<=n;++i) {
if(q[i].size()==1) cout<<(dn[i]+a[i]*(n-1)%mod*inv[n])%mod<<endl;
else cout<<0<<endl;
}
}
signed main()
{
{
for(int i=1;i<=200000;++i) inv[i]=qpow(i,mod-2);
inv[0]=1;
}
solve();
}
詳細信息
Test #1:
score: 100
Accepted
time: 39ms
memory: 11852kb
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: 38ms
memory: 11852kb
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: 39ms
memory: 7752kb
input:
1 41
output:
41 0
result:
wrong answer Output contains longer sequence [length = 2], but answer contains 1 elements