倒着加进去
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<vector>
#include<climits>
#include<string>
#include<cstdlib>
#include<ctime>
#define MOD 1000000007
#define LL long long
using namespace std;
int n,m,i,j,fat[3005],num[6005],nxt[6005],head[3005],cnt,f[3005],a,b,c[3005],rot,ans[3005],r;
void add(int p1,int p2)
{
cnt++;
num[cnt]=p2;
nxt[cnt]=head[p1];
head[p1]=cnt;
}
int find(int x)
{
int tmp;
if(fat[x]==x) return x;
tmp=find(fat[x]);
fat[x]=tmp;
return tmp;
}
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
fat[i]=i;
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
}
for(i=1;i<=n;i++)
scanf("%d",&c[i]);
for(i=n;i>=1;i--)
{
f[c[i]]=1;
rot=0;
for(j=head[c[i]];j;j=nxt[j])
if(f[num[j]])
{
r=find(num[j]);
fat[r]=c[i];
}
for(j=1;j<=n;j++)
if(f[j]&&fat[j]==j) rot++;
if(rot>1) ans[i]=1;
}
for(i=1;i<=n;i++)
{
if(ans[i]) printf("NO\n");
else printf("YES\n");
}
return 0;
}