Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33734 A21μΘ_wjy 【S】T2 C++ 通过 100 586 MS 684 KB 1380 2024-10-20 16:33:55

Tests(10/10):


#include<bits/stdc++.h> #define int long long using namespace std; const int maxn=5e3+7; const int mod=998244353; int n; int f[maxn][2]; vector<int> E[maxn]; bool tg[maxn]; int B[maxn]; bool vis[maxn]; inline void DFS(int u){ vis[u]=1; f[u][0]=1; f[u][1]=0; int Bl=0; for(auto v:E[u]){ if(vis[v])continue; Bl+=(1-tg[v]); if(tg[v]){ DFS(v); int l0=f[u][0],l1=f[u][1]; f[u][0]=(l0*f[v][0]%mod+l0*f[v][1]*2%mod)%mod; f[u][1]=(l1*f[v][0]%mod+l1*f[v][1]*2%mod+l0*f[v][1]%mod)%mod; } } if(Bl){ f[u][1]=(f[u][1]*B[Bl]%mod+f[u][0]*B[Bl-1]%mod*Bl%mod)%mod; f[u][0]=f[u][0]*B[Bl]%mod; } } signed main(){ #ifndef ONLINE_JUDGE freopen("1.in","r",stdin); freopen("1.out","w",stdout); #endif cin>>n;B[0]=1; for(int i=1;i<n;i++){ int u,v; cin>>u>>v; E[u].push_back(v),E[v].push_back(u); B[i]=(B[i-1]<<1)%mod; } B[n]=(B[n-1]<<1)%mod; for(int i=1;i<n;i++){ int x; cin>>x; tg[x]=1; for(int u=1;u<=n;u++)vis[u]=0; int ans=1; for(int u=1;u<=n;u++){ if(tg[u]&&!vis[u]){ DFS(u); ans=ans*f[u][1]%mod; } } cout<<ans<<endl; } }


测评信息: