QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#725194#9530. A Game On Treewht11WA 0ms14260kbC++142.1kb2024-11-08 16:37:402024-11-08 16:37:41

Judging History

This is the latest submission verdict.

  • [2024-11-08 16:37:41]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 14260kb
  • [2024-11-08 16:37:40]
  • Submitted

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;
}

Details

Tip: Click on the bar to expand more detailed information

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'