QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#725261 | #9530. A Game On Tree | wht11 | WA | 0ms | 10848kb | C++14 | 1.8kb | 2024-11-08 16:52:41 | 2024-11-08 16:52:43 |
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 sum1[N];
int num1, num2, num3;
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];
ans = (ans + 2 * (sum[v] * sum[u]) % mod) % mod; // 公共边的一段在子树v中,另一端在另一个子树中,但最近公共祖先是u
sum[u] = (sum[u] + sum[v]) % mod;
ans = (ans + (2 * (n - siz[v]) % mod * (n - siz[v]) % mod * sum[v] - (siz[v] * siz[v] % mod)) % mod) % mod; // 公共边的一段以u为起点,另一端在子树v中
}
ans = (ans + (siz[u] * siz[u] % mod * (n - siz[u]) % mod * (n - siz[u]) % mod)) % mod;
sum[u] = (sum[u] + (siz[u] * siz[u]) % mod) % mod;
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 % mod * n % mod * (n - 1) / 2 % mod;
num = qpow(num, mod - 2);
dfs(1, 0);
cout << (ans * num) % mod << endl;
for (int i = 1; i <= n; i++)
{
sum[i] = 0, siz[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: 0
Wrong Answer
time: 0ms
memory: 10848kb
input:
2 3 1 2 2 3 5 1 2 1 5 3 2 4 2
output:
332748120 399297744
result:
wrong answer 1st lines differ - expected: '443664158', found: '332748120'