提交时间:2025-02-07 15:57:05
运行 ID: 36104
#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],Ea[N],Eb[N],Ga[N],Gb[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; Ea[i] = x; Eb[i] = y; } for(int i = 1,x,y;i < n;i++) { cin >> x >> y; d2[x]++; d2[y]++; Ga[i] = x; Gb[i] = y; 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++) { ll res = n - 1 - d2[Ea[i]] - d2[Eb[i]]; if(mp.count(make_pair(Ea[i],Eb[i])) || mp.count(make_pair(Eb[i],Ea[i]))) res++; ans += res * inv16 % mod; ans %= mod; } cout << ans; return 0; }