Hdu 2236 无题II 最大匹配+二分
题目链接:
解题思路:
将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边,
假设二分图能全然匹配,则说明 不同行 不同列的n个元素 区间为(min_edge。max_edge),这些edge是指构成全然匹配的那些边
题目须要求解最小区间长度
我们 能够 二分区间长度(0~100),每次枚举区间的下界
最后得到的maxl 即为答案
代码:
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #define maxn 105
- using namespace std;
- int map[maxn][maxn];
- int link[maxn];
- int vis[maxn];
- int n,minv,maxv;
- int maxl,minl,l,mid;
- int dfs(int u)
- {
- for(int i=1;i<=n;i++)
- {
- if(!vis[i]&&map[u][i]>=l&&map[u][i]<=l+mid)
- {
- vis[i]=1;
- if(link[i]==-1||dfs(link[i]))
- {
- link[i]=u;
- return 1;
- }
- }
- }
- return 0;
- }
- int hungry()
- {
- memset(link,-1,sizeof(link));
- for(int i=1;i<=n;i++)
- {
- memset(vis,0,sizeof(vis));
- if(!dfs(i))
- return false;
- }
- return true;
- }
- int main()
- {
- int T;
- scanf("%d",&T);
- while(T--)
- {
- minv=105,maxv=0;
- scanf("%d",&n);
- for(int i=1; i<=n; i++)
- for(int j=1; j<=n; j++)
- {
- scanf("%d",&map[i][j]);
- if(map[i][j]>maxv)maxv=map[i][j];
- if(map[i][j]<minv)minv=map[i][j];
- }
- maxl=maxv-minv;
- minl=0;
- int flag;
- while(1)
- {
- mid=(maxl+minl)>>1;
- flag=0;
- for(l=minv;l+mid<=maxv;l++)
- if(hungry())
- {
- flag=1;
- break;
- }
- if(flag)
- maxl=mid;
- if(minl==mid)
- break;
- if(!flag)
- minl=mid;
- }
- printf("%d\n",maxl);
- }
- return 0;
- }
Hdu 2236 无题II 最大匹配+二分的更多相关文章
- HDU 2236 无题II(二分图匹配+二分)
HDU 2236 无题II 题目链接 思路:行列仅仅能一个,想到二分图,然后二分区间长度,枚举下限.就能求出哪些边是能用的,然后建图跑二分图,假设最大匹配等于n就是符合的 代码: #include & ...
- 【最大匹配+二分答案】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 2236(二分图最小点覆盖+二分)
无题II Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu2236 无题II 最大匹配 + 二分搜索
中文题目,题意大家都明白. 看到“不同的行和列”就觉得要用二分匹配来做.要求最大值与最小值的差值最小,是通过枚举边的下限和上限来完成. 枚举过程是这样的,在输入的过程可以记录下边权的最大值MAX和最小 ...
- hdu 3433 A Task Process 二分+dp
A Task Process Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- HDU 3567 Eight II(八数码 II)
HDU 3567 Eight II(八数码 II) /65536 K (Java/Others) Problem Description - 题目描述 Eight-puzzle, which is ...
- HDU 3622 Bomb Game(二分+2-SAT)
Bomb Game Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- 【3】利用Word模板生成文档的总结
阅读目录 Word二次开发概况 使用DsoFramer进行开发 使用Interop进行开发 打开.关闭和写入操作 批量替换文本 遍历段落替换文本 查找后逐个替换文本 结论 在各类应用系统开发中,和Wo ...
- java使用链栈实现迷宫求解
java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html java实现链栈的代码: package stackapplicatio ...
- HDU 4757
可持久化trie树.不会可持久化数据结构的话推荐先看陈立杰的论文.先掌握可持久化线段树和可持久化trie树. //可持久化trie树,题目已知一棵树,每个点有点权,询问一对点路径上点权与给定值异或的最 ...
- 总想自己动动手系列·2·本地和外网(Liunx服务器上部署的web项目)按照自定义的报文格式进行交互(完结篇)
一.准备工作 (1)创建一个web-project工程,部署本地可正常访问,部署在云服务上可访问. (2)理解如何在web.xml文件中配置过滤器,和创建一个自定义的过滤器. (3)懂得如何打war包 ...
- SlidingMenu(一)
我们一般称之为侧边栏,今天下倒腾了一下,留点笔记... 源码来自:https://github.com/jfeinstein10/SlidingMenu 来张图把: 代码API注释看看这个吧 http ...
- 在MVC的cshtml视图页获取默认路由下的ID值的方法
<a href="/user/resume/index/11"> <span class="title bold">我的 @Reques ...
- 如何连接oracle,mysql, SQL Server数据库(Java版)
先添加上连接oracle,MySQL的驱动路径和数据库连接URL: MySQL: final String DBDRIVER = "org.gjt.mm.mysql.Driver" ...
- TensorFlow 安装 Ubuntu14.04
1.Install pip (or pip3 for python3) if it is not already installed: # Ubuntu/Linux 64-bit $ sudo apt ...
- eclipse 10个常用 快捷键
Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. ...
- powerdesigner 画ER图
ER图 即为 CDM图 - Conceptual Data Modal CDM可以转换成PDM.OOM.LDM等图,具体请详查 一般,CDM图示在概要设计阶段创建,PDM图示根据CDM图的基础上产生的 ...