QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#693545 | #9530. A Game On Tree | rxzfn639 | WA | 1ms | 3496kb | C++23 | 2.3kb | 2024-10-31 16:21:07 | 2024-10-31 16:21:20 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const i64 P = 998244353;
template<typename T>
T qpow(T x, i64 n)
{
T ans = 1;
while(n) {
if(n & 1) {
ans *= x;
}
x *= x; n >>= 1;
}
return ans;
}
struct MInt
{
int x;
constexpr MInt(): x(0) {}
constexpr MInt(int x): x(x) {}
constexpr MInt(i64 x): x(x) {}
constexpr int norm(int x) {
if(x >= P) x -= P;
if(x < 0) x += P;
return x;
}
constexpr MInt operator+=(const MInt o) { return x = norm(x+o.x), *this; }
constexpr MInt operator-=(const MInt o) { return x = norm(x-o.x), *this; }
constexpr MInt operator*=(const MInt o) { return x = 1ll * x * o.x, *this; }
constexpr MInt operator/=(const MInt o) { return *this *= o.inv(); }
friend constexpr MInt operator+(const MInt a, const MInt b) { MInt res(a); return res += b; }
friend constexpr MInt operator-(const MInt a, const MInt b) { MInt res(a); return res -= b; }
friend constexpr MInt operator*(const MInt a, const MInt b) { MInt res(a); return res *= b; }
friend constexpr MInt operator/(const MInt a, const MInt b) { MInt res(a); return res /= b; }
constexpr MInt inv() const { return qpow(*this, P - 2); }
constexpr int val() const { return x; }
};
using Z = MInt;
void solve() {
int n;
cin >> n;
vector<vector<int>> G(n + 1);
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
vector<Z> sz(n + 1), sum(n + 1);
Z ans = 0;
auto dfs = [&](auto self, int u, int fa) -> void {
sz[u] = 1;
for (auto v : G[u]) {
if (v == fa) continue;
self(self, v, u);
sz[u] += sz[v];
ans = (ans + (n - sz[v]) * (n - sz[v]) * sz[v] * sz[v]);
ans = (ans + 2 * sum[u] * sum[v]);
sum[u] = (sum[u] + sum[v]);
}
ans = (ans + 2 * (n - sz[u]) * (n - sz[u]) * sum[u]);
sum[u] = (sum[u] + sz[u] * sz[u]);
};
dfs(dfs, 1, 0);
Z m = (n * (n - 1) / 2);
ans = ans * qpow(m * m, P - 2);
cout << ans.val() << '\n';
}
int main() {
ios::sync_with_stdio(0); cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while(t--) solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3496kb
input:
2 3 1 2 2 3 5 1 2 1 5 3 2 4 2
output:
-1327264198 0
result:
wrong answer 1st lines differ - expected: '443664158', found: '-1327264198'