#include<vector>
#include<iostream>
#include<map>
using namespace std;
multimap<int,int> mapp;
vector<int> luggage;
int main()
{
int t,i,j,m,n,k,isdanger=0;
int temp1,temp2,temp;
cin>>n>>m;
for(i=0;i<n;i++)
{
cin>>temp1>>temp2;
mapp.insert(make_pair(temp1,temp2));
}
for(i=0;i<m;i++)
{
cin>>k;
luggage.clear();
isdanger=0;
for(j=0;j<k;j++)
{
cin>>temp;
luggage.push_back(temp);
}
for(j=0;j<luggage.size();j++)
{
if(mapp.find(luggage[j])!=mapp.end())
{
temp=luggage[j];
for(t=0;t<luggage.size();t++)
{
temp1=luggage[t];
multimap<int, int> ::iterator it1 =mapp.lower_bound(temp);
multimap<int, int> ::iterator it2 =mapp.upper_bound(temp);
for(it1;it1!=it2;it1++)
{
if(temp1==it1->second)
isdanger=1;
break;
}
}
if(isdanger==1)
{
break;
}
}
}
if(isdanger==1)
{
break;
}
}
if(isdanger==1)
{
cout<<"No"<<endl;
}
else
{
cout<<"Yes"<<endl;
}
}
}
因为危险品一个key对应的value有多个,所以map<int,int>在这无效
应用multimap或map<int,vector>。。。
emmmm写的还是很差,不过学到了一些multimap的知识。。
下面贴下柳神代码
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main() {
int n, k, t1, t2;
map<int,vector<int>> m;
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++) {
scanf("%d%d", &t1, &t2);
m[t1].push_back(t2);
m[t2].push_back(t1);
}
while (k--) {
int cnt, flag = 0, a[100000] = {0};
scanf("%d", &cnt);
vector<int> v(cnt);
for (int i = 0; i < cnt; i++) {
scanf("%d", &v[i]);
a[v[i]] = 1;
}
for (int i = 0; i < v.size(); i++)
for (int j = 0; j < m[v[i]].size(); j++)
if (a[m[v[i]][j]] == 1) flag = 1;
printf("%s\n",flag ? "No" :"Yes");
}
return 0;
}