
题目链接:.php?pid=2458
Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1286 Accepted Submission(s): 679
Input The input consists of multiple test cases. Each test case starts with a line containing three integers
Output For each test case, print a line containing the test case number( beginning with 1) followed by a integer which is the maximum number of kids the teacher can pick.
Sample Input 2 3 3 1 1 1 2 2 3 2 3 5 1 1 1 2 2 1 2 2 2 3 0 0 0
Sample Output Case 1: 3 Case 2: 4
题目大意:有一堆男孩和女孩,男孩和男孩之间,女孩和女孩之间互相认识,给出一堆男孩女孩之间认识的关系,
问最多能邀请几个人去party,(邀请人之间互相直接认识)。
解题思路:把不认识的标记为1,认识的标记为0,那么这个结果就是该二分图的最大独立点集.最大匹配数=最小点覆盖=n-最大点独立集
AC代码:
1 #include<stdio.h>
2 #include<string.h>
3 #define N 210
4 int map[N][N],v[N],link[N];
5 int n,m;
6 int dfs(int k)
7 {
8 int i;
9 for(i=1;i<=m;i++)
10 {
11 if(map[k][i]&&!v[i])
12 {
13 v[i]=1;
14 if(link[i]==-1||dfs(link[i]))
15 {
16 link[i]=k;
17 return 1;
18 }
19 }
20 }
21 return 0;
22 }
23 int main()
24 {
25 int i,j,ans,a,b,t,tt=0;
26 while(~scanf("%d%d%d",&n,&m,&t))
27 {
28 if(!n&&!m&&!t)
29 break;
30 memset(map,1,sizeof(map));
31 while(t--)
32 {
33 scanf("%d%d",&a,&b);
34 map[a][b]=0;
35 }
36 ans=0;
37 memset(link,-1,sizeof(link));
38 for(i=1;i<=n;i++)
39 {
40 memset(v,0,sizeof(v));
41 if(dfs(i))
42 ans++;
43 }
44 printf("Case %d: %dn",++tt,n+m-ans);
45 }
46 return 0;
47 }
转载于:.html
本文发布于:2024-01-27 16:37:58,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063446821467.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |