无题II---hdu2236(二分,匈牙利)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2236
要求最大值与最小值的差值最小,是通过枚举边的下限和上限来完成
只需要用二分找一个区间,然后不断枚举这个区间是否可以达到最大匹配,一直二分到答案为止。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<algorithm>
using namespace std;
#define N 110
#define INF 0xfffffff int maps[N][N], n, Min, Max, ans, used[N], vis[N]; bool Find(int u)
{
for(int i=; i<=n; i++)
{
if(!vis[i] && maps[u][i]>=Min && maps[u][i]<=Max)
{
vis[i] = ;
if(!used[i] || Find(used[i]))
{
used[i] = u;
return true;
}
}
}
return false;
}
bool xyl()
{
memset(used, , sizeof(used));
for(int i=; i<=n; i++)
{
memset(vis, , sizeof(vis));
if(!Find(i))
return false;
}
return true;
}
int main()
{
int T, MinL, MaxR;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
MaxR = ;
MinL = INF;
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
scanf("%d", &maps[i][j]);
MinL = min(maps[i][j], MinL);
MaxR = max(maps[i][j], MaxR);
}
}
int L = ;
int R = MaxR - MinL;
ans = ;
while(L<=R)
{
int flag = ;
int i,Mid=(L+R)/;
for(i=MinL; i+Mid<=MaxR; i++)///
{
Min = i;
Max = i + Mid;
if(xyl())///说明可能还有比mid还小的差;
{
flag = ;
break;
}
}
if(flag)
{
ans=Mid;
R=Mid-;
}
else
L=Mid+;
}
printf("%d\n", ans);
}
return ;
}
无题II---hdu2236(二分,匈牙利)的更多相关文章
- Hdu 2236 无题II 最大匹配+二分
题目链接: pid=2236">Hdu 2236 解题思路: 将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边, 假设二分图能全然匹配,则说明 不同行 不同列的n个元素 ...
- HDU 2236 无题II(二分图匹配+二分)
HDU 2236 无题II 题目链接 思路:行列仅仅能一个,想到二分图,然后二分区间长度,枚举下限.就能求出哪些边是能用的,然后建图跑二分图,假设最大匹配等于n就是符合的 代码: #include & ...
- 无题II
无题II Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- (二分匹配“匈牙利算法”)无题II --HDU --2236
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2236 代码: #include<cstdio> #include<cstring> ...
- HDU 2236:无题II(二分搜索+二分匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2236 题意:中文题意. 思路:先找出最大和最小值,然后二分差值,对于每一个差值从下界开始枚举判断能不能二分匹配. ...
- HDU-2236 无题II
选取不同列不同行的N个数...明摆着叫你二分匹配 二分答案,然后枚举边的范围并跑匈牙利,以此判断答案范围. #include <cstdlib> #include <cstdio&g ...
- 无题II hdu 2236(二分枚举区间)
分析:只需要用二分找一个区间,然后不断枚举这个区间是否可以达到最大匹配,一直二分到答案为止. 代码: =============================================== ...
- hdu2236 无题II 最大匹配 + 二分搜索
中文题目,题意大家都明白. 看到“不同的行和列”就觉得要用二分匹配来做.要求最大值与最小值的差值最小,是通过枚举边的下限和上限来完成. 枚举过程是这样的,在输入的过程可以记录下边权的最大值MAX和最小 ...
- 无题II HDU - 2236 【二分图+二分答案】
题目 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. Input 输入一个整数T表示T组数据. 对于每组数据第一行输入一 ...
随机推荐
- [mysql] 查询前几条记录
From: http://www.cnblogs.com/xuxm2007/archive/2010/11/16/1878211.html SELECT * FROM table LI ...
- c :函数指针具体解释
在研究opencv源码的过程中.处处可见到函数指针,于是翻出来谭浩强的<C程序设计>把函数指针这一块内容再补一补! 1 定义 数据类型 (*指针变量名)(參数表); 注: 数据类型是指的函 ...
- Oracle:create pfile from spfile:rac下要小心该操作啊!
默认在原位置创建一个pfile的ora初始化参数文件!! 这在rac下会带来问题,因为rac下,当使用asm存储时,instance的启动参数文件就是pfile(其内容是指向一个spfile).如果不 ...
- XP 终端服务组件 ,SP3 多用户补丁(替换)文件
如附件 termsrv.dll 5.1.2600.5512 目前存在一个问题:每个用户只能使用一个会话.不能像2003+那样,一个用户使用多个会话. 待查找解决方案中............... ...
- Ubuntu 安装 Kubernetes
Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-Pa ...
- 【转自IT虾米网:www.itxm.net】外部应用和drools-wb6.1集成解决方案
一.手把手教你集成外部应用和drools workbench6.1 1. 首先按照官方文档安装workbench ,我用的是最完整版的jbpm6-console的平台系统,里面既包含j ...
- Linux中的SELinux详解--16
SELinux 宽容模式(permissive) 强制模式(enforcing) 关闭(disabled) 几种模式之间的转换 在CentOS6.2 中安装intel 的c++和fortran 的编 ...
- 第四章 Spring.Net 如何管理您的类___IObjectPostProcessor接口
官方取名叫 对象后处理器 (object post-processor) , 听起来很高级的样子啊!实际上就是所有实现了这个接口的类,增加了两个方法. Spring.Objects.Factory.C ...
- java图形化Swing教程(一)
与多线程.泛型等不同,Swing主要在于使用. 以下主要放代码和凝视.少说话. (一)基本框架 package Swing; import java.awt.*; import javax.swing ...
- Java精选笔记_会话技术
会话及其会话技术 会话概述 指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程. 会话:从浏览器开启到浏览器关闭.会话技术:用来保存在会话期间 浏览器和服务器所产生的数据. 在 ...