图问题,主要考察边的存储方式。
坑点如下
1,可将边都存入vector容器中,从而依次遍历所有边,如有一条不满足要求,则输出No,否则输出Yes
整体代码如下
#include<cstdio>
#include<vector>
#include<cstring>
#include<set>
using namespace std;
vector<int>v[10010];
set<int>s;
bool vis[10010];
int main(){
int n,m,v1,v2,k;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d",&v1,&v2);
v[i].push_back(v2);
v[i].push_back(v1);
}
scanf("%d",&k);
int num,v3;
for(int i=0;i<k;i++){
bool flag=true;
memset(vis,false,sizeof(vis));
scanf("%d",&num);
for(int l=0;l<num;l++){
scanf("%d",&v3);
s.insert(v3);
}
for(int k=0;k<m;k++){
if(s.find(v[k][0])==s.end()&&s.find(v[k][1])==s.end())
flag=false;
}
s.clear();
if(flag==true)printf("Yes\n");
else printf("No\n");
}
return 0;
}