题目链接:
还是太菜了,一开始看题的时候以为要用连通图的知识
其实不然
是要用二维数组存一下两边
set插入
然后查找
如果两条边都没有找到的话就是失败的,退出
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<set>
using namespace std;
int mp[10010][2];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>mp[i][0]>>mp[i][1];
}
int k;
cin>>k;
while(k--)
{
set<int >s;//注意要定义在里面,上一次的结果会有影响
int t;
cin>>t;
int a;
while(t--)
{
cin>>a;
s.insert(a);
}
int flag=1;
for(int i=1;i<=m;i++)
{
if(s.find(mp[i][0])==s.end()&&s.find(mp[i][1])==s.end())
{
flag=0;
break;
}
}
if(flag==0)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}