Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35971 | zqh2010 | 【S】T3 | C++ | 解答错误 | 5 | 2477 MS | 146972 KB | 1350 | 2025-02-07 12:24:12 |
/*C zhengjie*/ #include<bits/stdc++.h> #define int long long using namespace std; const int mod=998244353; int qpow(int a,int b) { int ret=1; while(b) { if(b&1)ret*=a,ret%=mod; a*=a,a%=mod,b>>=1; } return ret; } int ny(int chu) { return qpow(chu,mod-2); } int n,dp[200005],f[200005],g[200005],a,b; vector<int> v[200005]; void dfs(int p,int fa){ dp[p]=g[p]=0; f[p]=1; int cnt=0,sum=0; for(int i=0;i<v[p].size();i++){ if(v[p][i]!=fa){ cnt++; dfs(v[p][i],p); f[p]*=f[v[p][i]],f[p]%=mod; } } for(int i=0;i<v[p].size();i++){ if(v[p][i]!=fa){ dp[p]+=dp[v[p][i]]*f[p]%mod*ny(f[v[p][i]])%mod,dp[p]%=mod; g[p]+=g[v[p][i]]*f[p]%mod*ny(f[v[p][i]])%mod,g[p]%=mod; sum+=f[p]*ny(2)%mod,sum%=mod; } } dp[p]=2*dp[p]%mod+cnt*f[p]%mod+sum,dp[p]%=mod; g[p]=2*g[p]%mod+f[p],g[p]%=mod; f[p]*=2,f[p]%=mod; } signed main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n; for(int i=1;i<=n-1;i++){ int x,y; cin>>x>>y; v[x].push_back(y); v[y].push_back(x); } dfs(1,0); a=(dp[1]-g[1]+mod)%mod*ny(f[1])%mod+1; a%=mod; for(int i=1;i<=n;i++)v[i].clear(); for(int i=1;i<=n-1;i++){ int x,y; cin>>x>>y; v[x].push_back(y); v[y].push_back(x); } dfs(1,0); b=(dp[1]-g[1]+mod)%mod*ny(f[1])%mod+1; b%=mod; cout<<a*b%mod; return 0; }