【PAT甲级】1134 Vertex Cover (25分)

题意:

输入正整数N和M(均不超过10000),分别表示N个结点和M条边。接着输入一个正整数K(<=100),接着输入N行数据,每行包括一个数字X表示集合大小,以及X个数字表示集合元素,如果M条边每条边的两个结点至少出现在集合里一次,那么这个集合就称作全覆盖,输出Yes,否则输出No。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 set<int>s;
 5 int a[10007],b[10007];
 6 int main(){
 7     ios::sync_with_stdio(false);
 8     cin.tie(NULL);
 9     cout.tie(NULL);
10     int n,m;
11     cin>>n>>m;
12     for(int i=1;i<=m;++i)
13         cin>>a[i]>>b[i];
14     int k;
15     cin>>k;
16     for(int i=1;i<=k;++i){
17         int x;
18         cin>>x;
19         s.clear();
20         for(int j=1;j<=x;++j){
21             int y;
22             cin>>y;
23             s.insert(y);
24         }
25         int flag=0;
26         for(int j=1;j<=m;++j)
27             if(!s.count(a[j])&&!s.count(b[j]))
28                 flag=1;
29         if(!flag)
30             cout<<"Yes\n";
31         else
32             cout<<"No\n";
33     }
34     return 0;
35 }

猜你喜欢

转载自www.cnblogs.com/ldudxy/p/13160679.html