poj3692_Kindergarten
这题目大意是:男孩互相认识,女孩互相认识,一部分男女之间认识,老师要选一部分人,要求这部分人必须都相互认识。
这是一个二部图,先求出补图,在补图中G‘左右两点有连线说明在G中两者不认识,反之成立。
所以就是在补图中怎样来构造左右两部分间互相之间没有连线的图。============> 在G’中求出最大匹配,用匈牙利算法,然后去掉这些匹配中每个匹配的一个点让连线断掉,就找到了最大独立点集。说到这里,大家就知道了,求最大团就是等价于求补图中的最大独立点集。
代码如下:
#include <stdio.h>
#include <string.h>
int n1,n2,m,ans;
int result[]; //记录V2中的点匹配的点的编号
bool state []; //记录V2中的每个点是否被搜索过
bool data[][];//邻接矩阵 true代表有边相连
void init() {
int t1,t2;
for(int i=;i<=;++i)
for(int j=;j<=;++j)
data[i][j]=;
memset(result,,sizeof(result));
ans = ;
for (int i = ; i <= m; i++) {
scanf("%d%d",&t1,&t2);
data[t1][t2] = ;
}
return;
}
bool find(int a) {
for (int i = ; i <= n2; i++) {
if (data[a][i] == && !state[i]) { //如果节点i与a相邻并且未被查找过
state[i] = true; //标记i为已查找过
if (result[i] == //如果i未在前一个匹配M中
|| find(result[i])) { //i在匹配M中,但是从与i相邻的节点出发可以有增广路
result[i] = a; //记录查找成功记录
return true; //返回查找成功
}
}
}
return false;
}
int main() {
int CASE=;
while(~scanf("%d%d%d",&n1,&n2,&m)&&(n1||n2||m)){
init();
for (int i = ; i <= n1; i++) {
memset(state,,sizeof(state)); //清空上次搜索时的标记
if (find(i)) ans++; //从节点i尝试扩展
}
printf("Case %d: %d\n",++CASE,n1+n2-ans);
}
return ;
}
poj3692_Kindergarten的更多相关文章
随机推荐
- Linux命令(17)du 查看文件和目录磁盘使用情况
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...
- [实变函数]5.4 一般可测函数的 Lebesgue 积分
1定义 (1)$f$ 在 $E$ 上积分确定 $\lra$ $\dps{\int_Ef^+(x)\rd x<+\infty}$ 或 $\dps{\int_Ef^-(x)\rd x<+\in ...
- [物理学与PDEs]第1章 电动力学
[物理学与PDEs]第1章第1节 引言 [物理学与PDEs]第1章第2节 预备知识 2.1 Coulomb 定律, 静电场的散度与旋度 [物理学与PDEs]第1章第2节 预备知识 2.2 Ampere ...
- vs2012出现无法启动iis express web 服务器的错误
一直用的好好的,今天调试时却总报上面的错误.“文件查看器”->"windows 日志"->"系统"里发现有几条“HttpEvent”错误, 具体信息 ...
- 30天轻松学习javaweb_https协议的密码学
https通过非对称加密实现数据安全1.CA机构提供数字证书,其中数字证书包含公钥.2.浏览器自带功能验证数字证书是否是CA机构颁发的.3.根据数字证书包含的公钥对表单数据进行加密.4.公钥提供方再根 ...
- UIAlertView用法
1. 最简单的用法 UIAlertView*alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"这是一个简 ...
- 移动应用(手机应用)开发IM聊天程序解决方案
这个解决方法已经定制下来很久了,上一段时间比较忙,没有时间整这些东西.最近稍微好些,不怎么加班.所以抽空总结下,同时也分享给大家,也算是给大家一个借鉴吧!或许这并不是最好的解决方案,但只要能满足当前需 ...
- java中传递数组的写法
var arr=["110","120","119"]; //如果浏览器不支持JSON,就使用json2.js,json2.js的源码放在最 ...
- USB枚举过程
1. 枚举是什么? 枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序.调试USB设备,很重要的一点就是USB的枚举过程,只 ...
- 用Ultra ISO制作启动U盘装系统
用UltraISO制作启动U盘可以在没有光驱的情况下装系统. 现在有大容量U盘的越来越多,而且不装光驱的也越来越多. 那么用U盘装系统成为了可能和必须,不多废话了. 首先,需要准备的有: Ultra ...