Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33732 | LYLAKIOIAKIOI | 【S】T2 | C++ | 运行超时 | 0 | 1000 MS | 596 KB | 1181 | 2024-10-20 16:21:35 |
#include<bits/stdc++.h> using namespace std; const int N=5050,mod=998244353; bool mk[N];int n; vector<int> E[N]; inline void plu(int &a,int b){ a+=b;if(a>=mod) a-=mod; }inline int P(int a,int b){ int c=a+b;if(c>=mod) c-=mod; return c; }inline void mult(int &a,int b){ a=1ll*a*b%mod; }int f[N];bool vis[N]; int g[N],h[N]; inline void dfs(int u,int fa){ g[u]=1,h[u]=0; for(auto v:E[u]){ if(v==fa) continue; if(!mk[v]){ plu(h[u],h[u]); plu(h[u],g[u]); plu(g[u],g[u]); }else{ dfs(v,u); mult(h[u],P(P(h[v],h[v]),g[v])); plu(h[u],1ll*g[u]*h[v]%mod); mult(g[u],P(g[v],P(h[v],h[v]))); } } }int tmp=0; int ans=0; int main(){ cin>>n; for(int i=1;i<n;i++){ int u,v;cin>>u>>v; E[u].push_back(v); E[v].push_back(u); }for(int i=1;i<n;i++){ int x;cin>>x;mk[x]=1; ans=1; for(int j=1;j<=n;j++){ if(!vis[j]&&mk[j]){ dfs(j,j); mult(ans,h[j]); } }cout<<ans<<endl; } return 0; }