无题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组数据. 对于每组数据第一行输入一 ...
随机推荐
- Unity3d之Shader开发介绍
Shader是为渲染管线中的特定处理阶段提供算法的一段代码.shader是伴随着可编程渲染管线出现的,它的出现使得游戏开发者可以对渲染过程加以控制,拥有更大的创作空间,因此Shader的出现可以看作是 ...
- Javascript的setTimeOut和setInterval的定时器用法
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,而setInterval()则是在每隔指定的毫秒数循环调用函数或表达式, 直到 clearInterval把它清除.也就是说se ...
- C# SerialPortHelper类
using System; using System.IO.Ports; class SerialPortHelper { private long _receiveByteCount = 0, _s ...
- Ant多渠道批量打包
由于我现在已经用更好的gradle了,所以关于ant我只是简单的讲一讲,如果想学gradle请到我的博客中查看 http://www.cnblogs.com/uncle2000 ant的配置请自行百度 ...
- LazyValue<T>
public void ExtendFuncT() { //():匿名无参方法.() =>方法名,指派匿名无参方法去执行另外一个方法. LazyValue<int> lazyOne ...
- redis的初认识
Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用 ...
- ASP代码审计学习笔记 -2.XSS跨站脚本
XSS漏洞: 漏洞代码: <% xss=request("xss") response.write(xss) %> 漏洞利用: 漏洞修复: Server.HTMLEnc ...
- 查看磁盘读写:iotop
iotop命令用来动态地查看磁盘IO情况,用法如下: [root@localhost ~]$ yum install -y iotop # 安装iotop命令 [root@localhost ~]$ ...
- STM32的操作过程,寄存器配置与调试过程(转载)
很多学习stm32的,为什么学习stm32他也不知道,我们所知道的就是各个论坛讨论stm32的很多,而我们很多人之所以学习stm32是很多的淘宝卖家做了大量的图片文字宣传,于是我们经不住诱惑就买了板子 ...
- MYSQL系列之(一)
mysql简介 1.什么是数据库 ? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不 ...