QAQ
我们删边为加边,倒着加边,然后暴力判断,只要祖宗>1,就说明不连通
#include <cstdio>
#include <iostream>
using namespace std;
int fat[999999];
int map[3099][3099];
int w[99999];
bool ans[99999];
int find(int x)
{
if(x==fat[x]) return x;
return fat[x]=find(fat[x]);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
fat[i]=i;
for(int i=1;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=1;
map[b][a]=1;
}
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
int tot=0;
for(int i=n;i>=1;i--)
{
int fx=find(w[i]);
for(int j=i;j<=n;j++)
if(map[w[i]][w[j]]) fat[find(w[j])]=fx;
int x=0;
int flag=1;
for(int j=n;j>=i;j--)
{
int d=find(w[j]);
if(!x) x=d;
if(x&&x!=d)
{
flag=0;
break;
}
}
ans[++tot]=flag;
}
for(int i=n;i>=1;i--)
if(ans[i]) printf("YES\n");
else printf("NO\n");
}