(hdu step 6.3.2)Girls and Boys(比赛离开后几个人求不匹配,与邻接矩阵)
称号:
Girls and Boys |
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) |
Total Submission(s): 189 Accepted Submission(s): 127 |
Problem Description
the second year of the university somebody started a study on the romantic relations between the students. The relation “romantically involved” is defined between one girl and one boy. For the study reasons it is necessary to find out the maximum set satisfying the condition: there are no two students in the set who have been “romantically involved”. The result of the program is the number of students in such a set.
The input contains several data sets in text format. Each data set represents one set of subjects of the study, with the following description: the number of students The student_identifier is an integer number between 0 and n-1, for n subjects. |
Output
|
Sample Input
7 |
Sample Output
5 |
Source
Southeastern Europe 2000
|
Recommend
JGShining
|
题目分析:
二分图,求最大独立集。简单题。当中,最大独立集=节点数-最大匹配数/2。所谓的最大独立集,事实上就是
没有匹配到的点(未匹配点)的集合。
下面介绍一下二分图的一些基本概念:(本来想自己写的,可是发现别人整理的比自己即将要写的要具体。
所以在这里转了一下http://blog.csdn.net/pi9nc/article/details/11848327 的内容)
二分图:简单来说。假设图中点能够被分为两组,而且使得全部边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交集 U 和 V 。使得每一条边都分别连接U 、 V 中的顶点。假设存在这种划分。则此图为一个二分图。二分图的一个等价定义是:不含有「含奇数条边的环」的图。图 1 是一个二分图。为了清晰,我们以后都把它画成图 2 的形式。
匹配:在图论中,一个「匹配」(matching)是一个边的集合,当中随意两条边都没有公共顶点。比如。图 3、图 4 中红色的边就是图 2 的匹配。
我们定义匹配点、匹配边、未匹配点、非匹配边,它们的含义很显然。比如图 3 中 1、4、5、7 为匹配点,其它顶点为未匹配点;1-5、4-7为匹配边。其它边为非匹配边。
最大匹配:一个图全部匹配中,所含匹配边数最多的匹配。称为这个图的最大匹配。图 4 是一个最大匹配,它包括 4 条匹配边。
完美匹配:假设一个图的某个匹配中,全部的顶点都是匹配点,那么它就是一个完美匹配。图 4 是一个完美匹配。
显然,完美匹配一定是最大匹配(完美匹配的不论什么一个点都已经匹配,加入一条新的匹配边一定会与已有的匹配边冲突)。但并不是每一个图都存在完美匹配。
举例来说:例如以下图所看到的,假设在某一对男孩和女孩之间存在相连的边,就意味着他们彼此喜欢。是否可能让全部男孩和女孩两两配对,使得每对儿都互相喜欢呢?图论中。这就是完美匹配问题。假设换一个说法:最多有多少互相喜欢的男孩/女孩能够配对儿?这就是最大匹配问题。
题目分析:
求最大独立集。最大独立集=节点总数-最大匹配数/2
代码例如以下:
/*
* b.cpp
*
* Created on: 2015年3月13日
* Author: Administrator
*/ #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; const int maxn = 1001; int map[maxn][maxn];//map[i][j]=1,表示第i个女生愿意和第j个男生匹配
int link[maxn];//link[i] = t.表示第i个男生匹配的是女生t
int useif[maxn];//表示第i个男生是否已经匹配 int n; /**
* 推断t结点是否能找到匹配的节点
*/
bool can(int t){
int i;
for(i = 0 ; i < n ; ++i){//遍历全部的结点
//假设i结点还没有匹配 && t结点愿意和i结点匹配
if(useif[i] == false && map[t][i] == true){
useif[i] = true;//那么,将i结点标记为已经匹配
//假设i结点眼下眼下还没有匹配的节点 || i结点匹配的节点能够找到其它匹配的节点
if(link[i] == -1 || can(link[i])){
link[i] = t;//那么江i结点匹配的结点更新为t结点 return true;//返回true,表示t结点能够找到匹配的节点
}
}
} return false;//假设遍历上面的全部节点都未能找到匹配的节点,则返回false.表示未能为t找到匹配结点
} /**
* 求最大匹配数
*/
int max_match(){
int num = 0; int i;
for(i = 0 ; i < n ; ++i){//遍历全部节点,求最大匹配数
memset(useif,false,sizeof(useif));
if(can(i) == true){
num++;
}
} return num;//泛会所求道的最大匹配数
} int main(){
while(scanf("%d",&n)!=EOF){
memset(map,false,sizeof(map));
memset(link,-1,sizeof(link)); int i;
int a,b;
for(i = 0 ; i < n ; ++i){
scanf("%d: (%d)",&a,&b); int c;
int j;
for(j = 0 ; j < b ; ++j){
scanf("%d",&c);
map[a][c] = true;//表示a愿意和c匹配
}
} printf("%d\n",n-max_match()/2);//求最大独立集数
} return 0;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
(hdu step 6.3.2)Girls and Boys(比赛离开后几个人求不匹配,与邻接矩阵)的更多相关文章
- (hdu step 7.2.2)GCD Again(欧拉函数的简单应用——求[1,n)中与n不互质的元素的个数)
题目: GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
题目: The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 1068 Girls and Boys 二分图最大独立集(最大二分匹配)
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1068 Girls and Boys (二分匹配)
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1068 Girls and Boys(匈牙利算法求最大独立集)
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU——1068 Girls and Boys
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 1068 Girls and Boys (最大独立集)
Girls and BoysTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- POJ 1466 Girls and Boys
Girls and Boys Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=1466 Descripti ...
- Girls and Boys
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
随机推荐
- js jquery版本号 金额千分之一转换功能(非规范,高效率)
没想到js将没有 金额千分之一格处理器类型(例子:1,234.01 这种格公式).互联网搜索圈,我们使用的是常规方式.常规效率受宠若惊啊.和资源密集型,速度慢(虽然处理起来会很直观). 因此专门写一个 ...
- WPF和Expression Blend开发实例:一个样式实现的数字输入框
原文:WPF和Expression Blend开发实例:一个样式实现的数字输入框 今天来一个比较奇淫技巧的手法,很少人用,同时也不推荐太过频繁的使用. 先上样式: <Style x:Key=&q ...
- SecureCRT 6.7.1 RI和谐 皴 补丁 方法
它之前被使用SecureCRT 6.5.3 版本号,咋看和谐补丁,即使中国版本也可(现在才发现SecureCRT.6.2.0) 可是换为 6.7.1 后就怎么也注冊不了了.. 没办法试了各种办法: 先 ...
- PowerDesigner有几个需要设置
安装后PDM后.一些易于使用的设计人才需求. 一. 建立name与code做自己的主动关联,我们输入name当你不希望个别及连带code已经改变. 打开Tools->General Option ...
- EasyUI实战经验总结(转)
最近公司培训EasyUI,就做下总结吧,给有需要的人,源码在文章最后. 1.最常用的表格 ? 1 2 3 <div class="easyui-panel" data-opt ...
- newlisp 接受jenkins带空格的参数
jenkins有一个参数text种类,它能够以文本的段落拷贝作为参数 newlispThe program receives parameters are separated by spaces, 更 ...
- IBatis.net初步使用
最近加班比较忙,时间也比较琐碎,蛮久没有写东西了.这次就总结一下自己使用IBatis.net的一些总结吧. IBatis简介 IBatis.net是一款开源的Orm框架,应该算是从java的IBati ...
- (初稿)SQL Server 复制(Replication)系列(2)——事务复制搭建
原文:(初稿)SQL Server 复制(Replication)系列(2)--事务复制搭建 本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为 ...
- android代码集EditText只要输入号码、信
如何设置EditText,因此,只有某些数字或字母可以进入它? 一.建立EditText,只要输入号码: 办法1:直接生成DigitsKeyListener了. et_1.setKeyListe ...
- android 原生应用、Web应用、混合应用优缺点分析
近期开发几个项目,牵涉到android的几种开发模式.对于原生态开发.web 应用开发以及混合模式开发,本人觉得并非哪一种就是最好的,哪一种就是最差的,这个全然是依据项目的实际需求,选择一种合适的开发 ...