提交时间:2024-05-26 19:45:06
运行 ID: 29770
#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 dp[maxn],a[maxn],b[maxn],t,fa[maxn],son[maxn],dep[maxn]; vector<int> q[maxn]; 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(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); for(int i=1;i<n;i++){ int x,y; scanf("%d%d",&x,&y); q[x].push_back(y); q[y].push_back(x); } for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=1;i<=n;i++){ scanf("%d",&b[i]); } 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++){ int x=fa[a[i]],y=b[i]; if(dep[x]<dep[y]) swap(x,y); if(!dfs(x,y)){ // cout<<a[i]<<" "<<b[i]<<endl; fg=1; break; } } if(!fg) printf("Yes\n"); else printf("No\n"); } // fclose(stdin); // fclose(stdout); return 0; }