HDOJ---2236 无题II[二分枚举+匈牙利]
无题II
Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 571 Accepted Submission(s): 296
对于每组数据第一行输入一个正整数n(1<=n<=100)表示矩阵的大小。
接着输入n行,每行n个数x(0<=x<=100)。
1 /* 2 为了保证每行每列只取一个元素,我们可以从二分图最大匹配的思想入手,把行和列分别看做二分图左右两部分, 3 i-j的边权就是第i行第j列的元素的值。这样构图之后,求得的二分图最大匹配的4条边就是不在同行或同列的4个元素。 4 有了这个思想时候,我们只需要再保证4个元素中最大值与最小值之差尽量小就可以了,于是我们可以二分枚举最大值与最小值之差, 5 并枚举边权值的下界,如果枚举到某个边权值的下界时该图存在最大匹配,那么就更新max,否则就更新min。 6 */ 7 #include <iostream> 8 #include <iomanip> 9 #include <fstream> 10 #include <sstream> 11 #include <algorithm> 12 #include <string> 13 #include <set> 14 #include <utility> 15 #include <queue> 16 #include <stack> 17 #include <list> 18 #include <vector> 19 #include <cstdio> 20 #include <cstdlib> 21 #include <cstring> 22 #include <cmath> 23 #include <ctime> 24 #include <ctype.h> 25 using namespace std; 26 27 #define MAXN 110 28 29 int map[MAXN][MAXN]; 30 int vst[MAXN]; 31 int path[MAXN]; 32 int n; 33 int p; 34 int minnum,maxnum,midnum; 35 36 bool dfs(int v) 37 { 38 for(int i=0;i<n;i++) 39 if(map[v][i]>=p&&map[v][i]<=p+midnum&&!vst[i]) 40 { 41 vst[i]=1; 42 if(path[i]==-1||dfs(path[i])) 43 { 44 path[i]=v; 45 return true; 46 } 47 } 48 return false; 49 } 50 51 bool hungary() 52 { 53 memset(path,-1,sizeof(path)); 54 for(int i=0;i<n;i++) 55 { 56 memset(vst,0,sizeof(vst)); 57 if(!dfs(i)) //一旦发现有横坐标没有对应的y坐标与其匹配就return false 58 return false; 59 } 60 return true; //表示所有的横坐标已经全部匹配,return true 61 } 62 63 int main() 64 { 65 int t; 66 int i,j; 67 scanf("%d",&t); 68 while(t--) 69 { 70 int gmax=0,gmin=101; 71 scanf("%d",&n); 72 for(i=0;i<n;i++) 73 for(j=0;j<n;j++) 74 { 75 scanf("%d",&map[i][j]); 76 gmax=gmax>map[i][j]?gmax:map[i][j]; 77 gmin=gmin<map[i][j]?gmin:map[i][j]; 78 } 79 maxnum=gmax-gmin; 80 minnum=0; 81 while(1) 82 { 83 bool flag=false; 84 midnum=(maxnum+minnum)/2; 85 for(p=gmin;p+midnum<=gmax;p++) 86 { 87 if(hungary()) 88 { 89 flag=true; 90 break; 91 } 92 } 93 if(flag) 94 maxnum=midnum; 95 if(midnum==minnum) //注意:这三个if的顺序不能随意颠倒 96 break; 97 if(!flag) 98 minnum=midnum; 99 } 100 printf("%d\n",maxnum); 101 } 102 return 0; 103 }
转载于:https://www.cnblogs.com/XBWer/archive/2012/08/14/2638207.html
HDOJ---2236 无题II[二分枚举+匈牙利]相关推荐
- 洛谷P1182 数列分段Section II 二分答案
洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...
- 二分枚举+贪心(nyist疯牛)
点我啊~带你去找它\(^o^)/~ 一开始一点思路都没有,压根不知道它要求的是什么,然后问了一下班长,才明白题目的意思就是,给你N个点,要你找出最优解的C点,言简意赅的即使说区间选点. 思路: 假设两 ...
- poj 2455 Secret Milking Machine(二分枚举+最大流)
题意: 题意:FJ有N块地,这些地之间有P条双向路,每条路的都有固定的长度l.现在要你找出从第1块地到第n块地的T条不同路径,每条路径上的路不能与先前的路径重复,问这些路径中的最长路的最小是多少. 思 ...
- Brownie Slicing(二分枚举答案)
描述 Bessie has baked a rectangular brownie that can be thought of as an RxC grid (1 <= R <= 500 ...
- POJ 2455 Secret Milking Machine 二分枚举 + 最大流
题目:http://poj.org/problem?id=2455 题意:给定一张无向图,有n个节点p条边,要求在图中从1到n找到t条路径,并且使这t条路径中的最长边最小,输出这个最小的最长边 思路: ...
- ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 小扣在秋日市集选择了一 ...
- 【二分枚举】04:网线主管
还是二分搜索枚举解空间的题目. 代码思路基本上就是,找到解空间的上下限[base,top],然后main函数里面进行二分枚举,另外需要写一个判断某个值是否合法的函数. 04:网线主管 总时间限制: ...
- [Codeforces Round #635 (div2)]1337D - Xenia and Colorful Gems[二分][枚举]
1337D - Xenia and Colorful Gems[二分][枚举] time limit per test memory limit per test input output 3 sec ...
- ⭐算法入门⭐《二分枚举》中等03 —— LeetCode 1539. 第 k 个缺失的正整数
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 给你一个 严格升序排列 ...
最新文章
- php7+的php-fpm参数配置,注意事项
- 捅破窗户纸:如何从过程到对象—For金色的海洋以及所有为面向对象而困惑的Tx...
- SQL2005客户端连接到SQL2000服务器存在的问题
- 如何利用XShell隧道通过跳板机连接内网机器
- 网易云信实时音频框架背后:算法优化带来产品体验全面提升
- numpy基础(part8)--符号数组与矢量化
- linux sha1sum命令,讲解Linux中校验文件的MD5码与SHA1码的命令使用
- 为什么总是有人说Java啰嗦,却没人说C++啰嗦?
- python表达式的值是 y 和n是什么意思_python中^是什么意思
- 赞!清华大学发布首个自动图机器学习工具包AutoGL
- 抖音发布2020数据报告:日均视频搜索量破4亿,70后最爱发表情包
- 调用赋码远程服务异常_Remoting远程访问的这个异常怎么处理???
- Modscan32使用注意事项
- 实战案例丨腾讯安全托管服务MSS助力数字广东重保期间“0事故”
- 【 开源计划 - Flutter组件 】 星星也可以如此闪耀 flutter_star
- VBA-自动筛选符合条件的数据
- HTML学生个人网站作业设计:旅游景点网站设计——北京故宫(9页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- 2022年蓝桥杯省赛 C/C++ A组题解
- 【问题解决】安装Oracle数据库,中途提示未找不到文件的解决办法(附带图文)
- Windows编程 第四回 Windows程序的生与死(下)