Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
36092 | andy2025 | 【S】T3 | C++ | 解答错误 | 85 | 489 MS | 48860 KB | 1233 | 2025-02-07 15:37:13 |
#include <bits/stdc++.h> using namespace std; #define ll long long const int N = 2e5 + 10; const ll mod = 998244353; int n,d1[N],d2[N]; vector <int> G1[N],G2[N]; map <pair <int,int>,bool> mp; ll qpow(ll a,ll b) { ll ans = 1; while(b) { if(b & 1ll) ans *= a; ans %= mod; a *= a; b >>= 1ll; a %= mod; } return ans; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; for(int i = 1,x,y;i < n;i++) { cin >> x >> y; d1[x]++; d1[y]++; G1[x].push_back(y); G1[y].push_back(x); } for(int i = 1,x,y;i < n;i++) { cin >> x >> y; d2[x]++; d2[y]++; G2[x].push_back(y); G2[y].push_back(x); mp[make_pair(x,y)] = 1; mp[make_pair(y,x)] = 1; } ll inv4 = qpow(4,mod - 2),inv8 = qpow(8,mod - 2),inv16 = inv4 * inv4 % mod; ll ans = 1ll * n * (n - 1) % mod; ans *= inv4; ans %= mod; ll val = 1ll * (n - 1) * (n - 2) % mod; val *= inv4; val %= mod; ans -= val; ans %= mod; ans += mod; ans %= mod; for(int i = 1;i <= n;i++) { for(int y : G1[i]) { if(y < i) continue; ll res = n - 1 - d2[i] - d2[y]; if(mp.count(make_pair(i,y)) || mp.count(make_pair(y,i))) res++; ans += res * inv16 % mod; ans %= mod; } } cout << ans; return 0; }