题目大意:给你一个图,然后再给定若干个集合,判断图中每条边的两个端点是否都至少有一个点在集合中,是输出Yes,否则No
邻接表建图,不需要建无向图,把集合存在哈希表里,然后查询图中每对边的端点是否至少有一个点在哈希表中即可!
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
int n,m,a,b,k,x;
vector<int>e[10010];
int main()
{
scanf("%d%d",&n,&m);
while(m --)
{
scanf("%d%d",&a,&b);
e[a].push_back(b);
}
scanf("%d",&k);
while(k --)
{
scanf("%d",&x);
unordered_set<int>se;
for(int i = 0; i < x; i ++)
{
scanf("%d",&a);
se.insert(a);
}
int f = 1;
for(int i = 0; i < n; i ++)
{
if(se.count(i)) continue;
for(auto it : e[i])
{
if(!se.count(it)){f = 0;break;}
}
if(f == 0) break;
}
if(f == 0) puts("No");
else puts("Yes");
}
return 0;
}
|