1090 危险品装箱
思路:
用一个multimap来存储所有的不相容物品对,用一个vector来存储每一个物品清单。
每当在物品清单里面发现一个物品同时也是multimap里面的一个键时,就检查vector里是否有键对应的值
本人写的方法应该是不太简便的,最后一个测试点用时超过300ms,但毕竟是跑通了…
#include<stdio.h>
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
multimap<string, string> mp;
int main(int argc, char* argv[]) {
int n, m; cin >> n >> m;
for (int i = 0; i < n; i++) {
string a, b; cin >> a >> b;
mp.insert(make_pair(a, b));
mp.insert(make_pair(b, a));
}
for (int i = 0; i < m; i++) {
int k; cin >> k;
vector<string> ve;
for (int j = 0; j < k; j++) {
string s; cin >> s;
ve.push_back(s);
}
bool flag = true;
for (int j = 0; j < k; j++) {
if (flag == false) { break; }
if (mp.find(ve[j]) != mp.end()) {
vector<string>::iterator it;
multimap<string, string>::iterator pos;
for (pos = mp.begin(); pos != mp.end(); ++pos) {
if (pos->first == ve[j]) {
it = find(ve.begin(), ve.end(), pos->second);
if (it != ve.end()) { // 假如找到了不相容的物品
flag = false;
break;
}
}
}
}
}
if (flag == true) { cout << "Yes" << endl; }
else { cout << "No" << endl; }
}
return 0;
}