HDU 2458 — Kindergarten 最大团
来源:互联网 发布:重庆网络作家协会理事 编辑:程序博客网 时间:2024/04/27 23:06
原题:http://acm.hdu.edu.cn/showproblem.php?pid=2458
题意:
给出女孩人数、男孩人数,以及m条关系;
下面m行,u — v,表示女孩u和男孩v相互认识;
并且,男孩们之间相互认识,女孩们之间也相互认识;
问最多有多少个人,他们相互之间都认识;
思路:
显然是求最大团;
最大团 = 补图的最大独立集;
最大独立集 = 顶点数 - 最大匹配;
所以最大团 = 顶点数 - 补图的最大匹配数;
#include<stdio.h>#include<string.h>#include<vector>#include<algorithm>using namespace std;const int maxn = 250;int g, b, m;bool used[maxn], link[maxn][maxn];int match[maxn];int cas = 0;vector<int>G[maxn];bool find(int x){for(int i = 0;i<G[x].size();i++){int k = G[x][i];if(!used[k]){used[k] = true;if(match[k] == 0 || find(match[k])){match[k] = x;return true;}}}return false;}int main(){while(scanf("%d%d%d", &g, &b, &m)!=EOF){if(g == 0 && b == 0 && m == 0)break;memset(link, false, sizeof link);memset(match, 0, sizeof match);while(m--){int u, v;scanf("%d%d", &u, &v);link[u][v] = true;}for(int i = 1;i<=g;i++){G[i].clear();for(int j = 1;j<=b;j++){if(!link[i][j])G[i].push_back(j);}}int sum = 0;for(int i = 1;i<=g;i++){memset(used, false, sizeof used);if(find(i))sum++;}printf("Case %d: %d\n", ++cas, g+b-sum);}return 0;}
0 0
- HDU 2458 — Kindergarten 最大团
- HDU 2458Kindergarten(二分图 最大团点数)
- HDU-2458 Kindergarten 最大完全子图(最大团)中顶点的个数
- Poj 3692 Kindergarten【最大团】
- POJ3692:Kindergarten(最大团)
- POJ 3692:Kindergarten(最大团)
- poj 3692 -- Kindergarten(最大团,匈牙利)
- POJ 3692 Kindergarten (二分图 最大团)
- HDU 2458 二分匹配求最大团
- POJ 3692 Kindergarten 最大团->最大独立集
- poj 3692 Kindergarten (最大团模板题)
- poj 3692 Kindergarten,二分图的最大团
- POJ 3692 Kindergarten(二分图最大团)
- POJ 3692 Kindergarten(二分图最大团)
- POJ2692 Kindergarten 最大团 + 补图二分图
- poj 3692 Kindergarten(最大团,二分图匹配)
- hdu 5277(最大团问题)
- hdu 1530最大团模板
- android开发之merge结合include优化布局
- hdu 5323 Solve this interesting problem 【DFS】
- OpenCV - win7+vs2013(2012)+opencv3.0.0 环境配置 (以及配置技巧)
- SpringMVC集成quartz
- Web Service学习-CXF开发Web Service的权限控制(二)
- HDU 2458 — Kindergarten 最大团
- 计算机网络
- 一个初学者对于MVC架构的理解
- 多校赛3- Solve this interesting problem
- 二叉树的相关操作
- HDU - 5324(分治+树状数组)
- 黑马程序员——— 多态
- 象棋AI算法(一)
- VijosP1934属于她的幸福题解