QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#880645#10038. CentrifugeNana7WA 39ms11852kbC++201.8kb2025-02-03 16:34:042025-02-03 16:34:04

Judging History

你现在查看的是最新测评结果

  • [2025-02-03 16:34:04]
  • 评测
  • 测评结果:WA
  • 用时:39ms
  • 内存:11852kb
  • [2025-02-03 16:34:04]
  • 提交

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