题目
![]()
解法1
点击查看代码
#include <iostream>
#include <unordered_map>
#include <unordered_set>
using namespace std;
int main() {
int n, m; scanf("%d %d", &n, &m);
// 使用 unordered_map 存储不兼容商品,每个商品 ID 都对应一个集合,存储所有与之不兼容的商品
unordered_map<string, unordered_set<string>> incompatible;
while (n--) { // 读取不兼容的商品对
string a, b; cin >> a >> b;
incompatible[a].insert(b);
incompatible[b].insert(a); // 双向存储
}
while (m--) { // 处理每个待打包的物品列表
int num; scanf("%d", &num);
unordered_set<string> items;
bool hasConflict = false;
// 读取商品 ID
while (num--) {
string id; cin >> id;
// 检查当前商品的不兼容商品是否在 items 中
if (incompatible.find(id) != incompatible.end()) { // 如果id有不兼容的商品
for (const string& conflictId : incompatible[id]) {// 取出所有与id不兼容的商品
if (items.find(conflictId) != items.end()) {// 如果不兼容的商品出现过
hasConflict = true;
break;
}
}
}
items.insert(id); // 记录已出现的商品
}
printf(hasConflict ? "No\n" : "Yes\n");
}
return 0;
}