无题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组数据. 对于每组数据第一行输入一 ...
随机推荐
- wcf实体和ef实体冲突。。。
指定的架构无效.错误: CLR 类型到 EDM 类型的映射不明确,因为多个 CLR 类型与 EDM 类型“agentinfo”匹配.以前找到的是 CLR 类型“chanchengFlow.Models ...
- openal 基础知识
原文地址:http://blog.csdn.net/woker/article/details/8687380 一简介 OpenAL抽象出三种基本对象:buffers(缓冲区).sources(源). ...
- 在loadrunner中使用winsocket协议编写脚步三部曲
这两天写了一个winsocket的脚本,没有通过录制的方式,是直接手写的.下面贴出来和大家分享: 脚本的写法很简单,大体说来,就像把大象放进冰箱一样,总共分三步: 第一步:把冰箱门打开. //建立到服 ...
- 讨论CSS中的各类居中方式
今天主要谈一谈CSS中的各种居中的办法. 首先是水平居中,最简单的办法当然就是 margin:0 auto; 也就是将margin-left和margin-right属性设置为auto,从而达到水平居 ...
- JAVA程序员应该看的15本书的电子版
转载▼ 转载自:http://blog.sina.com.cn/s/blog_8297f0d00100v5ew.html 作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多, ...
- Tomcat之JSP运行原理之小试牛刀
最近空闲看了下JSP/Servlet,以前只知道用JSP,但是对其运行原理知之甚少,今在此做些笔记,以备查阅. 首先简要描述下其运行过程,然后结合Tomcat源码作简要分析. JSP运行过程: 第一步 ...
- Android中使用UncaughtExceptionHandler来处理未捕获的异常
原文在sparkyuan.me上.转载注明出处:http://sparkyuan.github.io/2016/03/28/使用UncaughtExceptionHandler来处理未捕获的异常/ 全 ...
- day10<面向对象+>
面向对象(package关键字的概述及作用) 面向对象(包的定义及注意事项) 面向对象(带包的类编译和运行) 面向对象(不同包下类之间的访问) 面向对象(import关键字的概述和使用) 面向对象(四 ...
- Binary XML file line #17<vector> tag requires viewportWidth > 0
Android高版本对比低版本 在我的项目中更改成 //buildToolsVersion '21.1.2'buildToolsVersion '24.0.1' // 24.0.1 必须用这个否则报B ...
- vs2010中使用luabind
第一部分:在vs2010中生成luabind静态库和动态库 一.前期准备 1.安装boost 下载boost并解压到 D:\mylua\boost_1_56_0,进入 D:\mylua\boost_1 ...