提交时间:2025-02-07 15:43:46

运行 ID: 36096

#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 += mod - val; 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; }