题目链接: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(二分,匈牙利)的更多相关文章

  1. Hdu 2236 无题II 最大匹配+二分

    题目链接: pid=2236">Hdu 2236 解题思路: 将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边, 假设二分图能全然匹配,则说明 不同行 不同列的n个元素 ...

  2. HDU 2236 无题II(二分图匹配+二分)

    HDU 2236 无题II 题目链接 思路:行列仅仅能一个,想到二分图,然后二分区间长度,枚举下限.就能求出哪些边是能用的,然后建图跑二分图,假设最大匹配等于n就是符合的 代码: #include & ...

  3. 无题II

    无题II Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  4. (二分匹配“匈牙利算法”)无题II --HDU --2236

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2236 代码: #include<cstdio> #include<cstring> ...

  5. HDU 2236:无题II(二分搜索+二分匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2236 题意:中文题意. 思路:先找出最大和最小值,然后二分差值,对于每一个差值从下界开始枚举判断能不能二分匹配. ...

  6. HDU-2236 无题II

    选取不同列不同行的N个数...明摆着叫你二分匹配 二分答案,然后枚举边的范围并跑匈牙利,以此判断答案范围. #include <cstdlib> #include <cstdio&g ...

  7. 无题II hdu 2236(二分枚举区间)

    分析:只需要用二分找一个区间,然后不断枚举这个区间是否可以达到最大匹配,一直二分到答案为止.   代码: =============================================== ...

  8. hdu2236 无题II 最大匹配 + 二分搜索

    中文题目,题意大家都明白. 看到“不同的行和列”就觉得要用二分匹配来做.要求最大值与最小值的差值最小,是通过枚举边的下限和上限来完成. 枚举过程是这样的,在输入的过程可以记录下边权的最大值MAX和最小 ...

  9. 无题II HDU - 2236 【二分图+二分答案】

    题目 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. Input 输入一个整数T表示T组数据. 对于每组数据第一行输入一 ...

随机推荐

  1. 【Java面试题】41 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

    对. 如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等. 如果不是要保存在HashSet或HashMap,则与hashcode没有什么 ...

  2. Ubuntu 12.04.2 安装 Oracle11gR2

    #step 1: groupadd -g 2000 dbauseradd -g 2000 -m -s /bin/bash -u 2000 griduseradd -g 2000 -m -s /bin/ ...

  3. gradle教程 [原创](eclipse/ADT下 非插件 非Android Studio/AS)纯手打 第三篇:gradle完整的实战

    上两篇的地址 安装配置 http://www.cnblogs.com/uncle2000/p/4276833.html 简单实战 http://www.cnblogs.com/uncle2000/p/ ...

  4. mysqldump工具,工作的本质是什么呢?(dump表的时候,是否会产生drop表的语句)

    需求描述: 今天在看mysqldump工具的使用过程,发现一个同事,是这样写的mysqldump命令 mysqldump -uroot -pmysql employees titles | mysql ...

  5. [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习

    Model代表应用程序管理的一些对象.例如,我们可能会为 我们想在系统中建模的现实世界中的一些物体像使用者.产品和汽车等定义一个Model.这些Model在 Ext.ModelManager中注册,被 ...

  6. spring+ehcache实战--性能优化之道

    在做系统集成平台项目的时候遇到了一个比較麻烦的问题.原因是使用考试系统的时候所依赖的是基础系统公布的webservice来获取基础数据,webservice的跨网络传输本身或多或少会对系统性能产生一定 ...

  7. 连接oracle服务器超慢--原因分析

    连接oracle服务器超慢:有如下原因可能会影响. 网络不好:oracle服务器跟本地网络不好. oracle服务器内存不足:导致反应超慢 监听日志listener.log太大:导致响应超慢. 所以对 ...

  8. js方法随机抽取n个随机数

    function getImageRandomPosition(){ do { var n = Math.floor(Math.random() * 12);//n为随机出现的0-11之内的数值 fo ...

  9. c/c++设置图片为透明图

    在绘制图片的时候先把源位图填充背景设置为白色 例如:m_bufferpicture.FillSolidRect(0,0,m_nWidth,m_nHeight,RGB(255,255,255));//这 ...

  10. MQTT的学习研究(十一) IBM MQTT 简单发布订阅实例

    package com.etrip.push; import com.ibm.mqtt.MqttAdvancedCallback; import com.ibm.mqtt.MqttClient; im ...