HDU1068Girls and Boys(最大独立数)
来源:互联网 发布:淘宝哪家茶叶店好 编辑:程序博客网 时间:2024/05/17 03:02
根据HDU1054http://blog.csdn.net/u010270403/article/details/10048577的讲解,应该对最大匹配数和匈牙利算法(求解最大匹配数的算法)有所了解,所以在此就不多说了;
下面我们看看最大独立集
无向图的最大独立数: 从V个顶点中选出k个顶,使得这k个顶互不相邻。 那么最大的k就是这个图的最大独立数;
性质:
最大独立集+最小覆盖集=总顶点数
最大团=补图的最大独立集
最小覆盖集=最大匹配(在二分图中);
题意:求出最大独立数;原题:http://acm.hdu.edu.cn/showproblem.php?pid=1068
题解:和hdu1054一样利用匈牙利算法先求出最大匹配数,只需把输出改一下就行了;
代码实现
#include<stdio.h>#include<cstring>#include<vector>using namespace std;#pragma comment(linker,"/STACK:102400000,102400000")#define MAX 1505int visit[MAX];//标记节点是否被访问过;int ret[MAX];//标记n个节点的增广节点的编号vector<int>map[MAX];//用stl模版中的向量存放邻接表int find(int cur )//找增广路径{ for(int i=0;i<map[cur].size();i++) { int j=map[cur][i]; if(!visit[j])//若j与cur相邻,且没有被标记 { visit[j]=1; if(ret[j]==-1||find(ret[j]))//如果j未在前一个匹配M中,或者,j在匹配M中,但从j相邻的节点出发可以找到增广路 { ret[j]=cur;//则把cur放到匹配M中; return 1; } } } return 0;}int main(){ freopen("input.txt","r",stdin); int n,x,m,y; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++)map[i].clear();//注意要清零; for(int i=0;i<n;i++) { scanf("%d:(%d)",&x,&m); for(int j=0;j<m;j++) { scanf("%d",&y); map[x].push_back(y);//用向量存放双向邻接表 map[y].push_back(x); } } int sum=0; memset(ret,-1,sizeof(ret));//因为节点从0开始,所以要赋值为-1; for(int i=0;i<n;i++)// { memset(visit,0,sizeof(visit)); sum+=find(i);//若有增广路,匹配数则加一 } printf("%d\n",n-sum/2);//最小顶点覆盖 == 最大匹配(双向图)/2;最大独立集=总顶点数-最小覆盖集 ; } return 0;}
- HDU1068Girls and Boys(最大独立数)
- hdu1068Girls and Boys(二分匹配,最大独立集)
- HDU1068Girls and Boys二分图最大匹配
- hdu1068Girls and Boys(求二分图的最大独立集)
- hdu1068Girls and Boys
- HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)
- Girls and Boys(最大独立集=节点数-最大匹配数)
- Girls and Boys----最大独立集(匹配)
- poj 1466 Girls and Boys (最大独立)
- hdu1068 Girls and Boys 最大独立集
- hdu1068 Girls and Boys最大独立集
- hdu1068 Girls and Boys 最大独立集
- hdu1068 Girls and Boys --- 最大独立集
- HDU1068 Girls and Boys 【最大独立集】
- POJ1466-Girls and Boys(最大独立集)
- 最大独立集 poj1466 Girls and Boys
- HDU1068 Girls and Boys(最大独立集)
- hdu 1068 Girls and Boys 最大独立集(最大匹配)
- Android 自定义progressDialog实现
- volatile和final
- C++类型转化分析:强制转换->const_cast转换
- 适合IT人自学的6个视频网站、8个社区网站
- 中断处理函数
- HDU1068Girls and Boys(最大独立数)
- 【Lucene3.6.2入门系列】第05节_自定义停用词分词器和同义词分词器
- C++类型转化分析:动态态转换->dynamic_cast
- apache安装以及cocos2d-x的html5版本环境搭建
- android之android.intent.category.DEFAULT的用途和使用
- C++类型转化分析:静态转换->static_cast
- (总结)CentOS Linux下VNC Server远程桌面配置详解
- Maze zoj3652(bfs+记忆化+状态压缩)
- 写好程序就像写好文章