#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>v[100000];
int main(){
int n,m,_1,_2,k,kt;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>_1>>_2;
v[_1].push_back(_2);
v[_2].push_back(_1);
}
for(int i=0;i<m;i++){
cin>>k;
vector<int>vce;
int flag=0;
int hash[100000]={0};//判断有无
fill(hash,hash+100000,0);
for(int j=0;j<k;j++){
cin>>kt;
vce.push_back(kt);
hash[kt]=1;
}
for(int j=0;j<k;j++){
for(int i=0;i<v[vce[j]].size();i++){
if(hash[v[vce[j]][i]]==1) flag=1;
}
}
if(flag==0){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}
总结 1.能用hash散列判断有无的就用hash散列,比遍历从第一找到最后一个快太多了
2.当数据特别大时比如v[100000]要放在main函数外作为全局变量
3.输出格式即使是yes no也不要自己打,直接复制减少错误
英语
问题
注意一下map 与二维vector的应用 占的空间要少一些map<int,vector<int>>