记录编号 |
248716 |
评测结果 |
AAAAAAAAAA |
题目名称 |
黑心买卖 |
最终得分 |
100 |
用户昵称 |
Fancy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.805 s |
提交时间 |
2016-04-10 23:04:51 |
内存使用 |
11.35 MiB |
显示代码纯文本
#include<cstdio>
using namespace std;
const int N=200001;
const int M=1000050;
int n,m,tot,ecnt,a[N],fa[N],no[N],head[N],to[M],next[M];
bool used[N],ans[N];
inline int father(int x)
{
return fa[x]==x?x:fa[x]=father(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);
to[++ecnt]=y;next[ecnt]=head[x];head[x]=ecnt;
to[++ecnt]=x;next[ecnt]=head[y];head[y]=ecnt;
}
for(int i=1;i<=n;i++) fa[i]=i,scanf("%d",&a[i]);
for(int i=n,x;i;i--)
{
x=a[i];
used[x]=1;no[++tot]=x;
for(int j=head[x],y=to[j];j;j=next[j],y=to[j])
if(used[y]) fa[father(x)]=father(y);
for(int j=1;j<=tot;j++)
if(father(no[j])==father(a[n])) no[j]=no[tot],tot--,j--;
ans[i]=!tot;
}
for(int i=1;i<=n;i++)
if(ans[i]) printf("YES\n");
else printf("NO\n");
}