奈因 @ 2020-09-26 22:11:39
#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[10000000];
int f[10000000];
bool ans[10000000];
int head[10000000],next[10000000];
bool v[1000000];
int find(int x)
{
if(f[x]!=x)f[x]=find(f[x]);
return f[x];
}
struct edge{
int x;
int y;
};
int id=0;
void add(int x,int y)
{
id++;
next[id]=head[x];
head[x]=id;
}
edge e[1000000];
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>e[i].x>>e[i].y;
add(e[i].x,e[i].y);
add(e[i].y,e[i].x);
}
for(int i=1;i<=n;i++)
{
f[i]=i;
cin>>a[i];
}
int cnt=0;
for(int i=n;i>=1;i--)
{
int x=f[i];
v[x]=1;
cnt++;
for(int j=head[x];j;j=next[j])
{
int p=e[j].y;
if(!v[p])continue;
int rx=find(x);
int ry=find(p);
if(rx!=ry)
{
f[rx]=ry;
cnt--;
}
}
if(cnt==1)ans[i]=1;
else ans[i]=0;
}
for(int i=1;i<=n;i++)
{
if(ans[i])cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
by Yun_Mengxi @ 2023-01-29 10:21:03
烤咕