A1149 Dangerous Goods Packaging (25分)

一、技术总结

  1. 这一题样例也要看清楚,不然想当然也会出错。
  2. 是直接使用map<int, int>进行数据存储也就是映射,以为是一对一的关系,其实发现是多对多的关系;可以使用map<int, vector> mp,进行存储;
  3. 思路大致是首先使用mp存储好对应关系,然后再使用vector存储要运输的货物,遍历,然后看其对应关系中是否存在要运输的货物中,这里使用set进行解决,也就是在使用vector进行存储时,也在set中存储。

二、参考代码

#include<iostream>
#include<set>
#include<map>
#include<vector>
using namespace std;
vector<int> all[100010];
int main(){
	int n, m, a, b;
	scanf("%d%d", &n, &m);
	map<int, int> mp;
	for(int i = 0; i < n; i++){
		scanf("%d%d", &a, &b);
		all[a].push_back(b);
		all[b].push_back(a);
	}
	int k;
	for(int i = 0; i < m; i++){
		scanf("%d", &k);
		vector<int> v(k);
		set<int> s;
		for(int j = 0; j < k; j++){
			scanf("%d", &v[j]);
			s.insert(v[j]);			
		}
		int flag = 1;
		for(int j = 0; j < k; j++){
			for(int p = 0; p < all[v[j]].size(); p++){
				if(s.find(all[v[j]][p]) != s.end()){
					printf("No\n");
					flag = 0;
					break;
				}				
			}
			if(flag == 0) break;
		}
		if(flag == 1) printf("Yes\n");
	}
	return 0;
}
posted @ 2020-06-21 22:17  睿晞  阅读(130)  评论(0编辑  收藏  举报