QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#695882 | #9530. A Game On Tree | zjh111111 | WA | 2ms | 8892kb | C++14 | 2.0kb | 2024-10-31 20:59:16 | 2024-10-31 20:59:28 |
Judging History
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'