QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#695882#9530. A Game On Treezjh111111WA 2ms8892kbC++142.0kb2024-10-31 20:59:162024-10-31 20:59:28

Judging History

This is the latest submission verdict.

  • [2024-10-31 20:59:28]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 8892kb
  • [2024-10-31 20:59:16]
  • Submitted

answer

#include <bits/stdc++.h>
#define int ll
#define For(i, l, r) for (int i=l; i<=r; ++i)
using namespace std;
typedef long long ll;
template <typename T>
inline void read(T &x) {
	char c = getchar(); int w = 1; x = 0;
	while (!isdigit(c))
		(c == '-') && (w = -w), c = getchar();
	while (isdigit(c))
		x = (x << 1) + (x << 3) + (c ^ '0'), c = getchar();
	x *= w;
}

const int N = 100010;
const ll mod = 998244353;
int n, val[N][3], siz[N], musiz[N], Ans;
vector<int> G[N];
inline void dfs(int u, int fa) {
	siz[u] = 1;
	for (auto v : G[u]) {
		if (v == fa) continue;
		dfs(v, u);
		siz[u] += siz[v];
		(val[u][0] += val[v][0]) %= mod;
		val[u][1] += (val[v][1]+val[v][0]);
		val[u][1] %= mod;
		(val[u][2] += (val[v][2] + val[v][1]*2 + val[v][0])) %= mod;
	}
	for (auto v : G[u]) {
		if (v == fa) continue;
		musiz[u] += siz[v] * (siz[u]-1-siz[v]);
		musiz[u] %= mod;
	}
	for (auto v : G[u]) {
		if (v == fa) continue;
		val[u][0] += siz[v] * (siz[u]-1-siz[v]);
		val[u][0] %= mod;
		val[u][1] += siz[v] * (siz[u]-1-siz[v]);
		val[u][1] %= mod;
		val[u][2] += siz[v] * (siz[u]-1-siz[v]);
		val[u][2] %= mod;
		Ans = (Ans + val[v][2] * ((musiz[u]-siz[v]*(siz[u]-1-siz[v]))+(n-siz[u])*(siz[u]-1-siz[v])*2+1+(n-siz[v]-1)*2) % mod) % mod;
	}
	(val[u][0] += 1 + (siz[u]-1) * 2) %= mod;
	(val[u][1] += 1 + (siz[u]-1) * 2) %= mod;
	(val[u][2] += 1 + (siz[u]-1) * 2) %= mod;
}
inline ll qpow(ll x, ll y) {
	ll res = 1;
	while (y) {
		if (y & 1) res = res * x % mod;
		x = x * x % mod; y >>= 1;
	}
	return res;
}
signed main() {
	int T;
	//cout << 1ll*918384806*(25 % mod) % mod << endl;
	read(T);
	while (T -- > 0) {
		read(n);
		For(i, 1, n) {
			G[i].clear();
			val[i][0] = val[i][1] = val[i][2] = 0;
			siz[i] = musiz[i] = 0;
		}
		For(i, 1, n-1) {
			int u, v;
			read(u); read(v);
			G[u].push_back(v);
			G[v].push_back(u);
		}
		Ans = 0;
		dfs(1, 0);
		Ans = Ans * (qpow(n*(n-1)/2, mod-2) * qpow(n*(n-1)/2, mod-2) % mod) % mod;
		printf("%lld\n", Ans);
	}
	return 0;
}

詳細信息

Test #1:

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

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: 2ms
memory: 8460kb

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:

821684130
816516219
550143557
768648153
562785721
862004375
471393168
984934430
475288982
119388794
214129579
413624399
836545272
203498851
515636345
696059768
928807248
20372335
480636174
144807053
482622275
56023919
272668598
126321046
698771049
512487103
741905064
828899331
310564911
271621058
35...

result:

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