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