hdu 5971

来源:互联网 发布:沈阳专业seo公司 编辑:程序博客网 时间:2024/06/09 23:53
#include <iostream>#include <cstdio>#include <cmath>#include <string.h>#include <queue>#include <stack>#include <algorithm>#include <fstream>#define ll long long#define INF 0x3f3f3f3f#define clr(x) memset(x,0,sizeof(x))#define clr2(x) memset(x,INF,sizeof(x))#define clr3(x) memset(x,-INF,sizeof(x))#define clr4(x) memset(x,-1,sizeof(x))#define pb(x) push_back(x)//#define debugusing namespace std;const ll mod=1e9+7;struct Edge{    int to,next;} edge[233333];struct E{    int u,v;}ed[23333];bool flag;int head[233333],cnt=0,n,m,x,y,deg[23333];vector<int> vec1,vec0;int c[12345];void init(){    cnt=0;    clr4(head);    clr4(c);    clr(deg);    vec1.clear();    vec0.clear();}void add(int u,int v){    edge[cnt].to=v;    edge[cnt].next=head[u];    head[u]=cnt++;}void dfs(int u,int fa,int color){    for (int i=head[u]; ~i; i=edge[i].next)    {        int v=edge[i].to;        if (v==fa) continue;        if (c[v]==color)        {            flag=false;            break;        }        if (c[v]==-1) c[v]=1-color,dfs(v,u,1-color);    }}int u,v,t;int main(){#ifdef debug    freopen("in.txt","r",stdin);    freopen("out.txt","w",stdout);#endif    while (scanf("%d%d%d%d",&n,&m,&x,&y)!=EOF)    {        flag=true;        init();        for (int i=1; i<=m; i++)        {            scanf("%d%d",&u,&v);            add(u,v);            add(v,u);            deg[u]++;            deg[v]++;        }        int st0=0,st1=0;        for (int i=1; i<=x; i++)        {            scanf("%d",&t);            c[t]=1;            vec1.pb(t);        }        for (int i=1; i<=y; i++)        {            scanf("%d",&t);            c[t]=0;            vec0.pb(t);        }        for (int i=0;i<vec1.size();i++)            if (deg[vec1[i]])            dfs(vec1[i],-1,1);        for (int i=0;i<vec0.size();i++)            if (deg[vec0[i]])            dfs(vec0[i],-1,0);        for (int i=1;i<=n;i++)            if (c[i]==-1)            {                if (deg[i]==0)                {                    flag=false;                    break;                }                else                    dfs(i,-1,0);            }        if (flag )            printf("YES\n");        else            printf("NO\n");    }    return 0;}
0 0
原创粉丝点击