Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
29782 | masppy | 【J】T4 | C++ | 解答错误 | 0 | 881 MS | 59892 KB | 2265 | 2024-05-26 20:48:11 |
#include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e5+10; const ll inf=2147483647; const ll mod=998244353; ll n,m,root=0,tot=0,ans=0; ll load[maxn],a[maxn*15],b[maxn],t,fa[maxn],son[maxn],dep[maxn]; vector<int> q[maxn]; vector<int> color[maxn*10]; void init(int pos,int from,int depth){ dep[pos]=depth; int siz=q[pos].size(); for(int i=0;i<siz;i++){ int v=q[pos][i]; if(v==from) continue; init(v,pos,depth+1); } } bool dfs(int x,int y){ if(a[x]==y){ return true; } if(x==1) return false; int siz=q[x].size(); for(int i=0;i<siz;i++){ int v=q[x][i]; if(dep[v]>dep[x]) continue; if(dep[son[v]]>=dep[x]) return false; if(!dfs(fa[v],y)) return false; son[v]=son[x]; fa[x]=fa[v]; return true; } } int main(){ // freopen("test.in","r",stdin); // freopen("code.out","w",stdout); scanf("%d",&t); while(t--){ scanf("%d",&n); if(t==3) cout<<n<<" "; for(int i=1;i<n;i++){ int x,y; scanf("%d%d",&x,&y); if(t==3) cout<<x<<" "<<y<<" "; q[x].push_back(y); q[y].push_back(x); } for(int i=1;i<=n;i++){ scanf("%d",&a[i]); color[a[i]].push_back(i); } for(int i=1;i<=n;i++){ scanf("%d",&b[i]); } if(t==3){ cout<<endl; for(int i=1;i<=n;i++) cout<<a[i]<<" "; cout<<endl; for(int i=1;i<=n;i++) cout<<b[i]<<" "; cout<<endl; } init(1,0,1); for(int i=1;i<=n;i++){ fa[i]=i; son[i]=i; } bool fg=0; for(int i=1;i<=n;i++){ if((i==1||q[i].size()!=1)&&(q[i].size()!=0)) continue; if(!dfs(i,b[i])){ // cout<<i<<" "<<b[i]<<endl; fg=1; break; } } for(int i=1;i<=n;i++){ // cout<<q[i].size()<<endl; if(i!=1&&q[i].size()==1) continue; int siz=color[a[i]].size(); bool fg1=0; for(int j=0;j<siz;j++){ int v=color[a[i]][j]; // cout<<v<<" "<<i<<" "<<fa[v]<<" "<<fa[i]<<endl; if(fa[v]=fa[i]){ fg1=1; break; } } if(!fg1){ // cout<<i<<endl; fg=1; break; } } if(!fg) printf("Yes\n"); else printf("No\n"); for(int i=1;i<=n;i++){ q[i].clear(); color[a[i]].clear(); } } // fclose(stdin); // fclose(stdout); return 0; }