POJ 3692 Kindergarten(最大团问题)

题目链接:
http://poj.org/problem?id=3692

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 ≤ MG × 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

 1 /*
 2 问题
 3 输入女孩和男孩的个数和部分女孩和男孩的认识关系
 4 计算并输出最多有多少个男孩和女孩是相互认识的
 5
 6 解题思路
 7 属于图论中的最大团问题。了解了完全子图,意即该子图中任意两点相互连接,那么最大完全子图就是求解
 8 最大完全子图的顶点数,也就是俗语说的最大团问题了。
 9 再来说说如何求解最大完全子图顶点数
10 有一个定理:最大团=原图补图的最大独立集=顶点数-原图补图最大匹配数
11
12 那怎么什么是补图呢,其实就是原图的完全相反状态,1就是0,0就是1
13 所以和求原图的最大独立集算法中只需将注释出改一个相反即可。
14 */
15 #include<cstdio>
16 #include<cstring>
17
18 int g,b,m;
19 int e[250][250],cx[250],cy[250],bk[250];
20 int maxmatch();
21 int path(int u);
22 int main()
23 {
24     int t1,t2,t=1,i;
25     while(scanf("%d%d%d",&g,&b,&m) == 3 && g+b+m != 0){
26         memset(e,0,sizeof(int)*250*250);
27         for(i=1;i<=m;i++){
28             scanf("%d%d",&t1,&t2);
29             e[t1][t2]=1;
30         }
31         printf("Case %d: %d\n",t++,g+b-maxmatch());
32     }
33     return 0;
34 }
35 int maxmatch()
36 {
37     int i,ans=0;
38     memset(cx,-1,sizeof(cx));
39     memset(cy,-1,sizeof(cy));
40     for(i=1;i<=g;i++){
41         memset(bk,0,sizeof(bk));
42         ans += path(i);
43     }
44     return ans;
45 }
46 int path(int u)
47 {
48     int i;
49     for(i=1;i<=b;i++){
50         if(!e[u][i] && !bk[i]){//求补图的最大独立集,所以只需将原来的e[u][i]变为!e[u][i]即可
51             bk[i]=1;
52             if(cy[i] == -1 || path(cy[i])){
53                 cy[i]=u;
54                 cx[u]=i;
55                 return 1;
56             }
57         }
58     }
59     return 0;
60 }

原文地址:https://www.cnblogs.com/wenzhixin/p/9053767.html

时间: 2024-11-05 06:22:16

POJ 3692 Kindergarten(最大团问题)的相关文章

poj 3692 Kindergarten (最大团模板题)

题目链接:http://poj.org/problem?id=3692 Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5156   Accepted: 2512 Description In a kindergarten, there are a lot of kids. All girls of the kids know each other and all boys also know e

POJ 3692 Kindergarten【最大点独立集】

大意: 有n个boy  m个girle   boy之间相互了解  girle之间相互了解 又告诉你一些boy和girle之间相互了解的关系 问最多选出多少人使其相互之间相互了解 分析: 左集合boy  右girle 若boy与girle相互不了解则建一条边,这样,有边相连的便是不相互了解的 那么最大点独立便是选取一些点使其相互之间没有边相连也就是相互了解的 note: 由于左右集合不相等所以选取nm中的较大的作为点的个数 最后结果为2 * max(n, m) - 最大匹配 代码: 1 #incl

poj 3692 Kindergarten (最大独立集)

Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4903   Accepted: 2387 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

POJ 3692 Kindergarten (二分图 最大团)

Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5660   Accepted: 2756 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

poj 3692 Kindergarten,二分图的最大团

最大独立集 = V - 最小顶点覆盖 二分图的最小顶点覆盖数 = 最大匹配数 最大团 = 补图的最大独立集 #include <cstdio> #include <cstring> #include <algorithm> #include <stack> #include <vector> #include <queue> using namespace std; const int maxn = 200 + 10; int n,

POJ 3692 Kindergarten(最大独立集)

[题目链接] http://poj.org/problem?id=3692 [题目大意] 男生相互之间都认识,女生相互之间也都认识, 一些男生和一些女生相互之间也认识,求找出最多的人参加派对, 他们相互之间都认识 [题解] 我们建认识图的反图,将相互之间不认识的连线, 那么问题转化为求这个图的最大独立集, 最大独立集答案为总点数减去最大匹配. [代码] #include <cstdio> #include <cstring> using namespace std; const i

poj 3692 Kindergarten

Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6956   Accepted: 3436 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

poj 3692 Kindergarten (最大独立集之逆匹配)

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 n

poj 3692 Kindergarten(二分图匹配)

题意:n个男孩相互认识,m个女孩相互认识,k对男孩和女孩相互认识,求最大的任意两人相互认识的集合: 思路:二分图匹配: 独立集=总数-最大匹配数: 最大团=原图补图的最大独立集=总数-补图的最大匹配数: 本题就是求最大团,先求补图的最大匹配数,匈牙利算法: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int t,n,m; int mm[505][505]; int