题目链接:.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 条评论) |