QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#725194 | #9530. A Game On Tree | wht11 | WA | 0ms | 14260kb | C++14 | 2.1kb | 2024-11-08 16:37:40 | 2024-11-08 16:37:41 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define lowbit(x) (x & (-x))
#define debug(x) cerr << #x << ": " << x << endl;
const int N = 2e5 + 10;
const int mod = 998244353;
int t = 1, n;
vector<int> G[N];
int ans = 0;
int siz[N], sum[N];
int qpow(int a, int n)
{
int res = 1;
while (n)
{
if (n & 1)
res = res * a % mod;
a = a * a % mod;
n >>= 1;
}
return res % mod;
}
int dep[N];
int sum1[N];
int num1, num2, num3;
void dfs(int u, int fa)
{
siz[u] = 1;
dep[u] = 1;
for (auto v : G[u])
{
if (v == fa)
continue;
dfs(v, u);
dep[u] = max(dep[u], dep[v] + 1);
siz[u] += siz[v];
ans = ans + sum[v] * sum[u]; // 公共边的一段在子树v中,另一端在另一个子树中,但最近公共祖先是u
num2 += sum[v] * sum[u];
sum[u] = (sum[u] + sum[v]) % mod;
if (dep[u] > 1)
{
ans = ans + (n - siz[v]) * (n - siz[v]) * (sum[v] - siz[v] * siz[v]) % mod; // 公共边的一段以u为起点,另一端在子树v中
num3 += (n - siz[v]) * (n - siz[v]) * (sum[v] - siz[v] * siz[v]);
}
sum[u] = sum[u] + siz[v] * siz[v];
}
ans = ans + siz[u] * siz[u] * (n - siz[u]) * (n - siz[u]);
sum[u] = sum[u] + siz[u] * siz[u];
num1 += siz[u] * siz[u] * (n - siz[u]) * (n - siz[u]);
return;
}
void solve()
{
cin >> n;
for (int i = 1; i < n; i++)
{
int u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
ans = 0;
int num = n * (n - 1) / 2 * n * (n - 1) / 2 % mod;
num = qpow(num, mod - 2);
dfs(1, 0);
// cerr << num1 << " " << num2 << " " << num3 << endl;
cout << (ans * num) % mod << endl;
for (int i = 1; i <= n; i++)
{
sum[i] = 0, siz[i] = 0, dep[i] = 0,
G[i].clear();
}
return;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> t;
while (t--)
solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 13784kb
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: 0ms
memory: 14260kb
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:
948445317 97624451 550143557 918384806 29285232 487662742 776412276 869581749 691391925 140185552 106294540 887328316 364977938 228707042 211479918 916412966 326102324 896382686 908525604 496041177 433351719 56023919 160212058 183319566 698771049 730945867 67535546 599710576 310564911 993807713 5037...
result:
wrong answer 2nd lines differ - expected: '468414020', found: '97624451'