这道题很简单,一开始我还以为检测是否被分治需要DFS或BFS,后来分析样例发现根本就不用,两个for循环就能检测出来了。
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int n,m;
vector<int> G[10005];
bool vis[10005];
bool judge(int s) {
if(vis[s]==true)return true;
for(int i=0; i<G[s].size(); i++) {
int u=G[s][i];
if(vis[u]==false) {
return false;
}
}
return true;
}
int main() {
cin>>n>>m;
for(int i=0; i<m; i++) {
int a,b;
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
int k;
cin>>k;
for(int i=0; i<k; i++) {
memset(vis,0,sizeof(vis));
int l;
scanf("%d",&l);
for(int j=0; j<l; j++) {
int x;
scanf("%d",&x);
vis[x]=true;
}
for(int k1=1; k1<=n; k1++) {
bool flag=judge(k1);
if(flag==false) {
cout<<"NO\n";
goto out;
}
}
cout<<"YES\n";
out:;
}
}