1134. Vertex Cover (25)

来源:互联网 发布:同花顺炒股交易软件 编辑:程序博客网 时间:2024/06/12 00:40

1134. Vertex Cover (25)

时间限制
600 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at least one vertex of the set. Now given a graph with several vertex sets, you are supposed to tell if each of them is a vertex cover or not.

Input Specification:

Each input file contains one test case. For each case, the first line gives two positive integers N and M (both no more than 104), being the total numbers of vertices and the edges, respectively. Then M lines follow, each describes an edge by giving the indices (from 0 to N-1) of the two ends of the edge.

After the graph, a positive integer K (<= 100) is given, which is the number of queries. Then K lines of queries follow, each in the format:

Nv v[1] v[2] ... v[Nv]

where Nv is the number of vertices in the set, and v[i]'s are the indices of the vertices.

Output Specification:

For each query, print in a line "Yes" if the set is a vertex cover, or "No" if not.

Sample Input:
10 118 76 84 58 48 11 21 49 89 11 02 454 0 3 8 46 6 1 7 5 4 93 1 8 42 2 87 9 8 7 6 5 4 2
Sample Output:
NoYesYesNoNo

解题思路:

y条边以下标0~y-1的顺序依次输入,用二维数组(列长为2)将每条边的两个端点编号进行记录。

每次flag初始为1,vis数组元素全部指向0,。输入一组端点编号,将与编号相对的vis数组下标元素设为1。

接着,把y条边(0-y-1)依次遍历。若有一条边的两个端点编号均不属于输入的端点编号,则表明没有完全覆盖。此时,用flag=0做标记,跳出循环。

flag=1,输出Yes,否则,输出No。


我的代码:

#include<stdio.h>#include<memory.h>int main(){int x,y,z,i,n,m,a[10001][2],vis[10001];scanf("%d%d",&x,&y);for(i=0;i<y;i++) scanf("%d%d",&a[i][0],&a[i][1]);scanf("%d",&z);while(z--){scanf("%d",&n);memset(vis,0,sizeof(vis));int flag=1;while(n--){scanf("%d",&m);vis[m]=1;}for(i=0;i<y;i++){if(vis[a[i][0]]==0 && vis[a[i][1]]==0){flag=0;break;}}if(flag==0) puts("No");else puts("Yes");}return 0;}


提交结果:



原创粉丝点击