POJ 3692 Kindergarten(最大独立集)
来源:互联网 发布:淘宝详情页思路 编辑:程序博客网 时间:2024/06/07 17:15
题意:已知班级有g个女孩和b个男孩,所有女生之间都相互认识,所有男生之间也相互认识,给出m对关系表示哪个女孩与哪个男孩认识。现在要选择一些学生来组成一个团,使得里面所有人都认识,求此团最大人数。
思路:任意两个同学之间要么认识,要么不认识.现在我们根据所有同学之间的不认识关系来建图.为什么呢?因为二分图匹配的时候左边和右边的点是独立的没有边的,如果我们按照同学间认识关系来建图,那么左边的点互相都有边,右边的点也互相都有边,那么就有问题了。
假设女生在左边点集,男生在右边点集.那么左边点集的内部肯定没边,右边点集同样没边. 对于女生i与男生j不认识的话,就连一条左边i与右边j的无向边. 这个图肯定是二分图.
然后我们现在要在这个图中选择最多的点,使得所选点集合中任意两个点都不存在边.(不存在边,那么就是任意两点都相互认识.其实就是该图的最大独立集).
由于最大独立集 = n(图节点总数)-最小覆盖数=n-最大匹配数. 所以我们只要求最大匹配数即可.
#include<cstdio>#include<cstring>#include<vector>using namespace std;const int maxn=500+10;struct Max_Match{ int n,m; int g[maxn][maxn]; bool vis[maxn]; int left[maxn]; void init(int n,int m) { this->n=n; this->m=m; for (int i = 1;i<=n;i++)for (int j = 1;j<=m;j++)g[i][j]=1; memset(left,-1,sizeof(left)); } bool match(int u) { for(int v=1;v<=m;v++) { if(g[u][v] && !vis[v]) { vis[v]=true; if(left[v]==-1 || match(left[v])) { left[v]=u; return true; } } } return false; } int solve() { int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(match(i)) ans++; } return ans; }}MM;int T;int cas = 1;int main(){ int g,b,m;while (scanf("%d%d%d",&g,&b,&m) && g+b+m){MM.init(g,b);for (int i = 1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);MM.g[u][v]=0;}printf("Case %d: %d\n",cas++,g+b-MM.solve());} return 0;}
0 0
- POJ 3692 Kindergarten ( 最大独立点集 )
- POJ 3692 Kindergarten(最大独立集)
- POJ 3692 Kindergarten (最大独立集)
- POJ 3692 Kindergarten(最大独立集)
- poj 3692 Kindergarten (最大独立集)
- POJ 3692 Kindergarten(最大独立集)
- poj--3692--Kindergarten(最大独立集)
- POJ 3692 Kindergarten (最大独立集)
- POJ-3692Kindergarten,求最大独立集!
- POJ 3692 Kindergarten(最大独立集)
- poj 3692 二分图最大独立集 Kindergarten
- poj 3692 Kindergarten 二分图 最大独立集
- POJ 3692 - Kindergarten 二分图的最大独立点集
- Poj 3692 Kindergarten 二分图最大独立点集
- POJ 3692 Kindergarten 最大团->最大独立集
- poj 3692 Kindergarten(二分图匹配,最大独立集)
- POJ 3692 Kindergarten 二分图最大独立集
- POJ 题目3692 Kindergarten(最大独立集)
- hdu 5298 Solid Geometry Homework
- uva1330 - City Game
- hdu 1520 树形dp
- 推导条件随机场参数估计的全过程
- uva1121 - Subsequence
- POJ 3692 Kindergarten(最大独立集)
- UI基础-01第一个iOS应用程序
- 区间问题三部曲(1) : 在线区间最值算法
- 20160212
- 计算机考研的看法
- Linux系统我最常用的20条命令
- Hibernate 与mybatis的区别
- 大数加法
- C++虚函数表详细解释及实例分析