HDU 2458Kindergarten(二分图 最大团点数)
2014-11-01 12:54
127 查看
Kindergarten
点击打开题目链接Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 785 Accepted Submission(s): 443
Problem Description
In a kindergarten, there are a lot of kids. All girls of the kids know each other and all boys also know each other. In addition to that, some girls and boys know each other. Now the teachers want to pick some kids to play a game, which need that all players
know each other. You are to help to find maximum number of kids the teacher can pick.
Input
The input consists of multiple test cases. Each test case starts with a line containing three integers
G, B (1 ≤ G, B ≤ 200) and M (0 ≤ M ≤ G × B), which is the number of girls, the number of boys and
the number of pairs of girl and boy who know each other, respectively.
Each of the following M lines contains two integers X and Y (1 ≤ X≤ G,1 ≤ Y ≤ B), which indicates that girl X and boy Y know each other.
The girls are numbered from 1 to G and the boys are numbered from 1 to B.
The last test case is followed by a line containing three zeros.
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
Source
2008 Asia Hefei Regional Contest Online
by USTC
题目大意:
一群小朋友,男的认识全部的男的,部分女生,女生认识全部的女生,认识部分男生,求最后能最多找出多少人,使得他们互相都认识。
团
团即一个点集,集合中任两个结点相邻。或者说是导出的子图是完全图的点集。极大团(maximal clique):本身为团,再加入任何点都不是。最大团(maximum clique):点最多的团。团数(clique number):最大团的点数。(见/article/1569204.html)
即求最大团点数:
最大团 = 补图的最大独立集
最小覆盖数+最大独立集 = 顶点数
在二分图中 最小覆盖数 = 最大匹配数
最大团 = 补图的最大独立集
最小覆盖数+最大独立集 = 顶点数
在二分图中 最小覆盖数 = 最大匹配数
即建立补图,然后求其最大匹配数;
代码:
#include<iostream> #include<stdlib.h> #include<string.h> #include<stdio.h> #define max(a,b) a>b?a:b #define min(a,b) a<b?a:b #define MAX 210 using namespace std; int map[MAX][MAX]; int v1,v2; int visit[MAX]; int l[MAX]; bool dfs(int x) { int i; for(i=1;i<=v2;i++) { if(map[x][i]&&!visit[i]) { visit[i]=1; if(l[i]==0||dfs(l[i])) { l[i]=x; return true; } } } return false; } int nmath()//匈牙利算法求最大匹配数,模板了 { int i,ans=0; for(i=1;i<=v1;i++) { memset(visit,0,sizeof(visit)); if(dfs(i)) ans++; } return ans; } int main() { int k,m,n,g,b,i,j,ans,cnt=0; while(~scanf("%d%d%d",&g,&b,&k)&&(g||b||k)) { memset(map,-1,sizeof(map)); memset(l,0,sizeof(l)); v1=g,v2=b; while(k--) { scanf("%d%d",&i,&j); map[i][j]=0; } ans=nmath(); printf("Case %d: %d\n",++cnt,g+b-ans); } return 0; }
相关文章推荐
- hdu 3829 二分图最大独立集
- 杭电 hdu 1528 Card Game Cheater (二分图,最大匹配)
- hdu 棋盘游戏 (求二分图最大匹配的关键点)
- hdu 1150 二分图 最小点覆盖=最大匹配
- hdu(4007)正方形能框住最大的点数
- hdu 2444 判断是否构成二分图,并求最大匹配
- hdu 1281 棋盘游戏 二分图最大匹配
- HDU 2063 过山车(二分图最大匹配问题)
- HDU 1068 Girls and Boys 二分图 最大独立集 字符串
- hdu 3829 Cat VS Dog 【二分图求最大独立集】
- 杭电 hdu 1507 Uncle Tom's Inherited Land*(二分图,最大匹配)
- HDU 2444 The Accomodation of Students【二分图判断+最大匹配】
- HDU 2063 过山车【二分图最大匹配】
- hdu Girls and Boys(二分图的最大独立集)
- hdu Rain on your Parade 二分图最大匹配
- 杭电 hdu 1498 50 years, 50 colors (二分图,最大匹配)
- hdu 2768,hdu 4160 二分图的最大匹配
- hdu 4160 Dolls--最小点集覆盖=V-二分图最大匹配
- 二分图最小覆盖点数(最大匹配):Machine Schedule
- hdu 3829 Cat VS Dog 【二分图求最大独立集】