题目传送门 <==戳这
这题容易想到建立map映射,但是这道题并非 “一 一映射”,而是一对多。这时就想起了map和vector的嵌套,键为int,值为int数组。
#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
using namespace std;
int main(){
std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int n,m;
cin>>n>>m;
int x,y;
map<int,vector<int> > mp; ==>map一对多型映射
for(int i=1;i<=n;i++){
cin>>x>>y;
mp[x].push_back(y); ==>互相添加,互相指向
mp[y].push_back(x);
}
int cnt;
int g;
for(int i=1;i<=m;i++){
int sign=1,hash1[100005]={0}; ==>hash1判断元素是否在集合内
cin>>cnt;
vector<int> v(cnt); ==>暂时保存各个元素
for(int j=0;j<cnt;j++){
cin>>v[j];
hash1[v[j]]=1; ==>标记为在集合内
}
for(int j=0;j<cnt;j++){ ==>一维
for(int k=0;k<mp[v[j]].size();k++){ ==>二维
if(hash1[mp[v[j]][k]]==1){ ==>枚举v[j]对应的每一个值
sign=0;
break;
}
}
}
if(sign==1) puts("Yes");
else puts("No");
}
}