比赛 ZLXSCDay2 评测结果 AAAAAAAAAA
题目名称 黑心买卖 最终得分 100
用户昵称 葳棠殇 运行时间 1.524 s
代码语言 C++ 内存使用 8.47 MiB
提交时间 2016-04-10 17:19:02
显示代码纯文本
#include <cstdio>
using namespace std;
struct node{
	int v,nt;
	node(){}
	node(int _,int __){v=_,nt=__;}
}e[1000050];
int cnt,n,m;
int first[200005],fa[200005],ddd[200005];
bool vis[200005],ans[200005];
void add(int x,int y){
	e[++cnt]=node(y,first[x]);first[x]=cnt;
	e[++cnt]=node(x,first[y]);first[y]=cnt;
}
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int main(){
	freopen("closing.in","r",stdin);
	freopen("closing.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1,x,y;i<=m;i++)scanf("%d%d",&x,&y),add(x,y);
	for(int i=n;i;i--)scanf("%d",&ddd[i]),fa[i]=i;
	cnt=0;
	for(int i=1;i<=n;i++){
		vis[ddd[i]]=1;
		++cnt;
		for(int k=first[ddd[i]];k;k=e[k].nt){
			if(!vis[e[k].v])continue;
			int f=find(e[k].v);
			if(f!=ddd[i])--cnt,fa[f]=ddd[i];
		}
		ans[i]=(cnt==1);
	}
	for(int i=n;i;i--)ans[i]?puts("YES"):puts("NO");
}