HDU 2236:无题II(二分搜索+二分匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2236
题意:中文题意。
思路:先找出最大和最小值,然后二分差值,对于每一个差值从下界开始枚举判断能不能二分匹配。
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
#define N 105
#define INF 0x3f3f3f3f
bool vis[N];
int match[N];
int mp[N][N];
int n, mi, ma, run, mid; // 二分差值搜索枚举下界判断能不能成立 bool dfs(int u)
{
for(int i = ; i <= n; i++) {
if(!vis[i]) {
if(mp[u][i] < run || mp[u][i] > run + mid) continue; // 这个数不能小于下界也不能大于上界
vis[i] = ;
if(match[i] == - || dfs(match[i])) {
match[i] = u;
return true;
}
}
}
return false;
} bool solve() // 匈牙利算法
{
memset(match, -, sizeof(match));
for(int i = ; i <= n; i++) {
memset(vis, , sizeof(vis));
if(!dfs(i)) return false;
}
return true;
} int main()
{
int t;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
memset(mp, , sizeof(mp));
mi = INF, ma = ;
for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
scanf("%d", &mp[i][j]);
if(mp[i][j] < mi) mi = mp[i][j];
if(mp[i][j] > ma) ma = mp[i][j];
}
}
int l = , r = ma - mi, ans;
while(l <= r) {
mid = (l + r) / ; // 二分差值
bool f = ;
for(run = mi; run + mid <= ma; run++) // 从下界开始枚举
if(solve()) { r = mid - ; break; }
if(r != mid - ) l = mid + ;
// printf("%d, %d, %d\n", l, r, mid);
}
printf("%d\n", l);
}
return ;
} /*
2
4
1 2 1 1
2 2 2 2
3 3 3 3
4 4 4 4
4
1 1 1 1
1 2 2 2
3 1 3 3
4 4 1 4
*/
HDU 2236:无题II(二分搜索+二分匹配)的更多相关文章
- HDU 2236 无题II(二分图匹配+二分)
HDU 2236 无题II 题目链接 思路:行列仅仅能一个,想到二分图,然后二分区间长度,枚举下限.就能求出哪些边是能用的,然后建图跑二分图,假设最大匹配等于n就是符合的 代码: #include & ...
- Hdu 2236 无题II 最大匹配+二分
题目链接: pid=2236">Hdu 2236 解题思路: 将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边, 假设二分图能全然匹配,则说明 不同行 不同列的n个元素 ...
- 【最大匹配+二分答案】HDU 2236 无题II
题目内容 这是一个简单的游戏,在一个\(n×n\)的矩阵中,找\(n\)个数使得这\(n\)个数都在不同的行和列里并且要求这\(n\)个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\ ...
- HDU 2236 无题II 题解
题目 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\)表示\(T\)组数据. 对于每组数 ...
- HDU 2236 无题Ⅱ
HDU 2236 无题Ⅱ 题目大意 这是一个简单的游戏,在一个\(n*n\)的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. solution 暴枚\(i ...
- HDU - 3081 Marriage Match II 【二分匹配】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意 有n对男女 女生去选男朋友 如果女生从来没和那个男生吵架 那么那个男生就可以当她男朋友 女 ...
- HDU 2063 过山车(二分匹配入门)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配最大匹配数简单题,匈牙利算法.学习二分匹配传送门:http://blog.csdn.ne ...
- HDU - 1045 Fire Net(二分匹配)
Description Suppose that we have a square city with straight streets. A map of a city is a square bo ...
- hdu 2236(二分图最小点覆盖+二分)
无题II Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- 面向对象编程(十二)——final关键字
final关键字 Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量. 在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和 ...
- IE、chrome、火狐中如何调试javascript脚本
1. IE中点击"F12",在弹出页面中调试javascript脚本 2. chrome中点击"F12",在弹出页面中调试javascript脚本 3. 火 ...
- Vue.2.0.5-Class 与 Style 绑定
Class 与 Style 绑定 数据绑定一个常见需求是操作元素的 class 列表和它的内联样式.因为它们都是属性 ,我们可以用v-bind 处理它们:只需要计算出表达式最终的字符串.不过,字符串拼 ...
- jquery .on的使用
1.7版本以上,开始使用.on绑定时间 给jquery动态产生的元素绑定事件不能使用普通的$("#fff").click(function(){alert("ok&quo ...
- example of Python http server
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler print "hello " class TestHTT ...
- 编写简单的Mapreduce程序并部署在Hadoop2.2.0上运行
今天主要来说说怎么在Hadoop2.2.0分布式上面运行写好的 Mapreduce 程序. 可以在eclipse写好程序,export或用fatjar打包成jar文件. 先给出这个程序所依赖的Mave ...
- 刨根问底U3D---关于Delegate的方方面面
我是否需要阅读这篇文章 Code1: private delegate void BloodNumDelegate (); public delegate void ExpNumChangeDeleg ...
- 数据库性能之--ibatis cache应用
(1)利用cache是提升性能的一个很重要方式!cacheModel节点定义了本映射文件中使用的Cache机制:<cacheModel id="userCache" type ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [转]关于安装hadoop中出现的的 $HADOOP_HOME is deprecated 的解决方法
当前用户的.bash_profile在/home/用户/下,系统的.bash_profile在/etc/skel目录下; 默认可能是隐藏的:有人会问了,隐藏的我怎么打开它,一个简单的办法,直接使用vi ...