比赛 |
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");
}