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;
}
posted @ 2021-12-17 00:10  Infinite_V胜  阅读(14)  评论(0)    收藏  举报