#include<bits/stdc++.h>
using namespace std;
const int N = 2010;
int s[N];
int num[N];
void init(int n)
{
for(int i=1;i<=n;i++)
{
s[i]=i;
num[i]=0;
}
}
int find(int x)
{
return x!=s[x]?s[x]=find(s[x]):s[x];
}
void merge(int x,int y)
{
s[find(x)]=find(y);
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int n,m,x,y;
while(cin>>n>>m>>x>>y)
{
bool flag=0;
init(2*n);
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
if(find(u)==find(v))
{
flag=1;
}
merge(u,n+v);
merge(v,n+u);
}
for(int i=1;i<=x;i++)
{
int u;
cin>>u;
int id = find(u);
if(id<=n)
{
num[id]=1;
continue;
}
int ID = find(id-n);
if(num[id]==0)
{
num[id]=1;
}else if(num[id]==2)
{
flag=1;
}
if(num[ID]==0)
{
num[ID]=2;
}else if(num[ID]==1)
{
flag=1;
}
}
for(int i=1;i<=y;i++)
{
int u;
cin>>u;
int id = find(u);
if(id<=n)
{
num[id]=2;
continue;
}
int ID = find(id-n);
if(num[id]==0)
{
num[id]=2;
}else if(num[id]==1)
{
flag=1;
}
if(num[ID]==0)
{
num[ID]=1;
}else if(num[ID]==2)
{
flag=1;
}
}
for(int i=1;i<=n;i++)
{
if(s[i]==i&&num[i]==0) flag=1;
}
if(flag) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}
分类并查集
最新推荐文章于 2024-07-19 15:39:46 发布