1090 危险品装箱 (25 分)
原题
https://pintia.cn/problem-sets/994805260223102976/problems/1038429484026175488
知识点
1、map和unordered_map的使用 https://blog.csdn.net/qq_21997625/article/details/84672775
unordered_map的用法和map是一样的,提供了 insert,size,count等操作,并且里面的元素也是以pair类型来存贮的。
map: #include < map > 内部实现一个红黑树,对于那些有顺序要求的问题,用map会更高效一些
unordered_map: #include <unordered_map> 内部实现了哈希表,因此其查找速度非常的快
2、题目首先确定好怎么存储这种一对多的关系。(我最开始想的是二维数组,但是明显工具库更好操作)
3、先把所有数据存下来,然后一个接一个找
代码
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int main(void){
int n,m,num1,num2;
map<int,vector<int>> map;
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>num1>>num2;
map[num1].push_back(num2);
map[num2].push_back(num1);
}
while(m--){
int k,a[100000]={0};//a[]方便索引G[i](PS:a数组要初始化化)
cin>>k;
vector<int> vec(k);
bool flag=true;
for(int j=0;j<k;j++){
cin>>vec[j];
a[vec[j]]=1;
}
for(int i=0;i<vec.size();i++){
for(int j=0;j<map[vec[i]].size();j++)
if(a[map[vec[i]][j]]==1){
flag=false;
break;
}
}
flag?cout<<"Yes\n":cout<<"No\n";
}
return 0;
}