RT,提示 Exit code is -1073741819
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define forz(i,a,b) for(register int i((a));i<=(b);++i)
#define forn(i,a,b) for(register int i((a));i>=(b);--i)
inline int read()
{
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
int n;
const int maxn=2e5+100;
//==================build edge==================//
struct node{
int to;
int nxt;
}edge[maxn];
int head[maxn];
int e;
inline void add(int x,int y)
{
edge[++e].to=y;
edge[e].nxt=head[x];
head[x]=e;
}
inline void add_edge(int x,int y)
{
add(x,y);
add(y,x);
}
int dep[maxn],fa[maxn];
void dfs(int k,int f)
{
dep[k] = dep[f] + 1;
fa[k] = f;
for(int i = head[k]; i; i = edge[i].nxt)
{
int u = edge[i].to;
if(u == f) continue;
dfs(u, k);
}
}
int a[maxn],id[maxn],b[maxn];
signed main()
{
n=read();
forz(i,1,n-1)
{
int x=read(),y=read();
add_edge(x,y);
}
forz(i,1,n) a[i]=read();
dfs(a[1],0);
forz(i,2,n) if(dep[a[i]]<dep[a[i-1]]) return cout<<"No",0;
forz(i,1,n) id[a[i]]=i;
forz(i,1,n) b[i]=fa[a[i]];
int len=unique(b+1,b+n+1)-b-1;
forz(i,1,len) if(id[b[i]]<id[b[i-1]]) return cout<<"No",0;
cout<<"Yes";
return 0;
}