题目链接:1090 危险品装箱
思路
- 让每个物品编号带一个数组,不能兼容的物品会有同一个号,即输入不兼容数据时在不能兼容的同一组物品的数组中添加同一个编号,后称为不兼容组号。
- 输入物品清单时,逐位扫描货物,标记出现了的不兼容组号,若标记中发现该号已被标记,则不安全。
代码
#include <iostream>
#include <vector>
#include <map>
using namespace std;
map<int,vector<int>> mp1;
map<int,int> mp2;
int isSafe(int a){
vector<int>::iterator it = mp1[a].begin();
while(it!=mp1[a].end()){
if(mp2[*it])return 0;
mp2[*(it++)]++;
}
return 1;
}
int main(){
int N, M, K, a, b;
cin >> N >> M;
for(int i=0;i<N;i++){
cin >> a >> b;
mp1[a].push_back(i);
mp1[b].push_back(i);
}
for(int i=0;i<M;i++){
cin >> K;
int flag = 1;
for(int j=0;j<K;j++){
cin >> a;
if(flag && !isSafe(a)) flag = 0;
}
printf("%s\n",flag?"Yes":"No");
mp2.clear();
}
return 0;
}