代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[200010],vis[200010],dep[200010],cnt=1,maxx;
vector<int> tree[200010],depp[200010];
void dfs(int x,int y){
if(y>maxx)
maxx=y;
dep[y]++;
depp[y].push_back(x);
for(int i=0;i<tree[x].size();i++){
if(!vis[tree[x][i]]){
vis[tree[x][i]]=1;
dfs(tree[x][i],y+1);
}
}
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
tree[x].push_back(y);
tree[y].push_back(x);
}
for(int i=1;i<=n;i++)
cin>>a[i];
dfs(1,1);
int sum=0;
for(int i=1;i<=maxx;i++){
sum+=dep[i-1];
for(int j=sum+1;j<=sum+dep[i];j++){
int tmp=0;
for(int k=0;k<depp[i].size();k++){
if(a[j]==depp[i][k]){
tmp=1;
break;
}
}
if(!tmp){
cout<<"No";
return 0;
}
}
}
cout<<"Yes";
return 0;
}