PAT甲级1134
题目大意:给出n个顶点m条边,接下来给出k组待查询数据,问每组数据是否能包括每条边(只要一条边有一个顶点在该组数据里即可)。
定义两个数组存放第i条边的两个端点,查询时候直接用set。若某条边两个顶点都未出现在该集合里则输出No,否则输出Yes。这里用vector判断会超时。
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#define MAXN 10005
using namespace std;
int n;
int a[MAXN],b[MAXN];
int main(){
int m,v1,v2,k,num,tmp;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d",&a[i],&b[i]);
}
scanf("%d",&k);
set<int> query;
for(int i=0;i<k;i++){
query.clear();
scanf("%d",&num);
for(int j=0;j<num;j++){
scanf("%d",&tmp);
query.insert(tmp);
}
int j=0;
for(j=0;j<m;j++){
if(query.find(a[j])==query.end()&&query.find(b[j])==query.end()){
printf("No\n");
break;
}
}
if(j==m) printf("Yes\n");
}
system("pause");
return 0;
}