QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#697168#9530. A Game On TreeqiuboboWA 4ms8268kbC++143.1kb2024-11-01 11:34:292024-11-01 11:34:30

Judging History

This is the latest submission verdict.

  • [2024-11-01 11:34:30]
  • Judged
  • Verdict: WA
  • Time: 4ms
  • Memory: 8268kb
  • [2024-11-01 11:34:29]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std; 

const int N = 100010; 
const int mod = 998244353; 

int add(int a, int b) {
	int c = a + b;
	if (c >= mod) c -= mod;
	return c; 
}
int dec(int a, int b) {
	int c = a - b;
	if (c < 0) c += mod;
	return c;  
}
int mul(int a, int b) {
	return 1ll * a * b % mod;
}
int qpow(int a, int b) {
	int p = 1;
	while (b) {
		if (b & 1)	
			p = mul(p, a); 
		a = mul(a, a);
		b >>= 1;  
	}
	return p; 
} 

int n, ans; 
vector<int> e[N];


int root, Mi, S; 
int mx[N], siz[N]; 
bool vis[N]; 


void findroot(int u, int fa) {
	siz[u] = 1; 
	mx[u] = 0; 
	for (int v : e[u]) {
		if (v == fa || vis[v]) 
			continue; 
		findroot(v, u); 
		siz[u] += siz[v]; 
		mx[u] = max(mx[u], siz[v]); 
	} 
	mx[u] = max(mx[u], S - siz[u]); 
	if (mx[u] < Mi) {
		Mi = mx[u]; 
		root = u; 
	}
}

/*
(du, fv)
fu = (\sum sizv)^2 - (\sum sizv^2) 
(sizu + (n - sizu))^2
gv = n^2 -  \sum sizv^2
fv = gu - 2sizv(n - sizv) 
du^2fu * (\sum fv)
2dufu * (\sum fv*dv)
fu * (dv^2fv) 
(du + dv) ^ 2 * fu * fv
*/

int g[N]; 
void dfs2(int u, int f) {
	siz[u] = 1; 
	g[u] = mul(n, n); 
	for (int v : e[u])
		if (v != f) {
			dfs2(v, u); 
			siz[u] += siz[v]; 
			g[u] = dec(g[u], qpow(siz[v], 2)); 
		}
	g[u] = dec(g[u], qpow(n - siz[u], 2)); 
}

int Dep[N], Siz[N], f[N];
int S1, S2, S3, s1, s2, s3;  
void dfs(int u, int fa) {
	Dep[u] = Dep[fa] + 1;
	Siz[u] = 1;  
	f[u] = 0; 
//	cerr << "?dfs:" << u << endl;
//	cerr << "?Dep:" << Dep[u] << endl;
	for (int v : e[u]) {
		if (v == fa || vis[v]) 
			continue; 
		dfs(v, u);
		Siz[u] += Siz[v];
	}
	f[u] = dec(g[u], mul(mul(2, Siz[u]), n - Siz[u])); 
//	cerr << "?u, f, g:" << u << ' ' << f[u] << ' ' << g[u] << endl;
	ans = add(ans, mul(mul(qpow(Dep[u], 2), f[u]), S1)); 
	ans = add(ans, mul(mul(2, mul(f[u], Dep[u])), S2)); 
	ans = add(ans, mul(f[u], S3)); 
	s1 = add(s1, f[u]);
	s2 = add(s2, mul(f[u], Dep[u])); 
	s3 = add(s3, mul(qpow(Dep[u], 2), f[u])); 
}
void divide(int u) {
//	cerr << "divide:" << u << endl;
	S1 = S2 = S3 = 0; 
	Dep[u] = 0; 
	vis[u] = 1; 
	Siz[u] = 1; 
	for (int v : e[u]) {
		if (vis[v]) 
			continue;
		
		s1 = s2 = s3 = 0;
		 
		dfs(v, u);
		Siz[u] += Siz[v];  
		
		int fu = dec(g[u], mul(mul(2, Siz[v]), n - Siz[v]));
		ans = add(ans, mul(fu, s3));  
		
		S1 = add(S1, s1); 
		S2 = add(S2, s2);
		S3 = add(S3, s3); 
	}
//	cerr << "?" << ans << endl;
	for (int v : e[u]) {
		if (vis[v])
			continue; 
			
		root = 0, Mi = 0x7fffffff, S = Siz[u]; 
		findroot(v, u);
		divide(root); 
	}
	
}

void init() {
	ans = 0;
	for (int i = 1; i <= n; i ++) {
		e[i].clear(); 
		vis[i] = 0; 
	}
}
void solve() {
	cin >> n;
	init(); 	
	for (int i = 1; i < n; i ++) {
		int u, v; 
		cin >> u >> v; 
		e[u].emplace_back(v); 
		e[v].emplace_back(u); 
	}
	
	dfs2(1, 0); 
	
	root = 0, Mi = 0x7fffffff, S = n; 
	findroot(1, 0); 
	divide(1); 
	cout << mul(ans, qpow(qpow(1ll * n * (n - 1) / 2 % mod, mod - 2), 2)) << endl; 
}


int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0); 
	int T;
	cin >> T;
	while (T --)
		solve(); 
	return 0; 
} 

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 6724kb

input:

2
3
1 2
2 3
5
1 2
1 5
3 2
4 2

output:

443664158
918384806

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 4ms
memory: 8268kb

input:

1000
7
3 6
4 3
5 3
2 6
1 4
7 1
12
5 7
10 7
2 10
11 2
1 7
8 1
4 2
9 11
6 9
12 11
3 5
6
2 5
1 2
4 5
6 4
3 6
5
2 5
1 5
4 5
3 2
8
1 8
2 8
4 2
6 1
5 6
7 6
3 8
8
3 8
7 3
4 8
6 4
2 7
5 2
1 4
4
3 1
4 3
2 1
6
5 1
6 1
2 5
3 5
4 2
12
8 11
5 11
12 8
3 12
6 12
2 3
4 6
10 11
1 5
9 5
7 5
9
6 1
7 6
4 7
8 7
5 4
9 6
...

output:

982399208
498663851
310564915
918384806
711758412
385801075
776412276
869581749
110228547
765628773
63160525
129402049
19799896
940494682
347536928
297747949
844474393
584006902
951906100
221832080
950807129
453284428
867301808
278830600
259543535
366957926
449579681
599710576
310564911
286902823
36...

result:

wrong answer 1st lines differ - expected: '948445317', found: '982399208'