Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35980 | a+qazolite | 【S】T3 | C++ | 通过 | 100 | 449 MS | 26040 KB | 1321 | 2025-02-07 13:21:59 |
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; const int N = 2e5 + 5, MOD = 998244353; int n, d[N], g[2][25][25]; bool vis[N]; map<pii, bool> b; inline int A(int x, int y) { return (x + y) % MOD; } inline int S(int x, int y) { return A(x, MOD - y); } inline int W(int x, int y) { return 1ll * x * y % MOD; } inline int P(int x, int y) { int t = x % MOD, res = 1; while (y) { if (y & 1) res = W(res, t); t = W(t, t); y >>= 1; } return res; } inline int D(int x, int y) { return W(x, P(y, MOD - 2)); } inline int SUM(int x) { return W(x, P(2, x-1)); } int main() { cin >> n; if (n == 1) { puts("1"); return 0; } int VV = 0, VE = 0, EE = 0; for (int i = 1; i <= n; i++) VV = A(VV, SUM(n - 1)); // 点、边 int u, v; for (int i = 1; i < n; i++) { scanf("%d%d", &u, &v); b[make_pair(u, v)] = b[make_pair(v, u)] = true; d[u]++, d[v]++; VE = A(VE, SUM(n-2)); } // 边、边 if (n >= 4) { for (int i = 1; i < n; i++) { scanf("%d%d", &u, &v); EE = A(EE, (MOD + (n - 1 - d[u] - d[v])) % MOD); if (b.count(make_pair(u, v))) EE = A(EE, 1); } EE = W(EE, P(2, n - 4)); } int res = A(S(S(VV, VE), VE), EE); // cout << res << endl; cout << D(res, P(2, n)) << endl; return 0; }