思路:
1.将所有互斥物品存放于map中,然后依据货物清单逐一遍历每件物品的互斥物品是否在清单中;
2.货物清单可用大数组存放,以空间换时间,否则可能超时。
代码:
#include<iostream>
#include<unordered_map>
#include<vector>
using namespace std;
int main()
{
int n,m;
unordered_map<int,vector<int>> mp;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
int in1,in2;
scanf("%d%d",&in1,&in2);
mp[in1].push_back(in2);
mp[in2].push_back(in1);
}
for(int i=0;i<m;i++)
{
int num;
scanf("%d",&num);
vector<int> v(num);
bool goods[99999]={false},isSafe=true;
for(int j=0;j<num;j++)
{
scanf("%d",&v[j]);
goods[v[j]]=true;
}
for(int j=0;j<num;j++)
{
for(auto k:mp[v[j]])
if(goods[k]==true)
{
isSafe=false;
break;
}
if(isSafe==false) break;
}
isSafe==true?printf("Yes\n"):printf("No\n");
}
return 0;
}