思路:
- 一开始用邻接矩阵和并查集做的,但是超时了
- 之后改成了用邻接表的方式就能过了
代码如下:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
int visit[10001];
vector<int> map[10001];
int main(){
int n,m;
scanf("%d %d",&n,&m);
int a,b;
while(m>0){
scanf("%d %d",&a,&b);
map[a].push_back(b);
map[b].push_back(a);
m--;
}
int k;
cin>>k;
while(k>0){
fill(visit+1,visit+n+1,0);
int np;
scanf("%d",&np);
while(np>0){
int vi;
scanf("%d",&vi);
visit[vi] = 1;
np--;
}
int flag = 1;
for(int i=1; i<=n; i++){
if(!visit[i]){
for(int j=0; j<map[i].size(); j++){
if(!visit[map[i][j]]){
flag = 0;
break;
}
}
}
if(!flag)
break;
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
k--;
}
return 0;
}