题目链接:

pid=2236">Hdu 2236

解题思路:

将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边,

假设二分图能全然匹配,则说明 不同行 不同列的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 最大匹配+二分的更多相关文章

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

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

  2. 【最大匹配+二分答案】HDU 2236 无题II

    题目内容 这是一个简单的游戏,在一个\(n×n\)的矩阵中,找\(n\)个数使得这\(n\)个数都在不同的行和列里并且要求这\(n\)个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\ ...

  3. HDU 2236 无题II 题解

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

  4. HDU 2236 无题Ⅱ

    HDU 2236 无题Ⅱ 题目大意 这是一个简单的游戏,在一个\(n*n\)的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. solution 暴枚\(i ...

  5. hdu 2236(二分图最小点覆盖+二分)

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

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

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

  7. hdu 3433 A Task Process 二分+dp

    A Task Process Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  8. HDU 3567 Eight II(八数码 II)

    HDU 3567 Eight II(八数码 II) /65536 K (Java/Others)   Problem Description - 题目描述 Eight-puzzle, which is ...

  9. HDU 3622 Bomb Game(二分+2-SAT)

    Bomb Game Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. 换掉Tomcat默认图标

    将<Tomcat_home>下的/webapps/ROOT的favicon.ico替换成你自己的图标,名还得是这个名. 然后清除浏览器缓冲,webapp默认的小猫图标就被换掉了. 效果如下 ...

  2. NET Framework安装失败的麻烦

    本人机子环境是安装了VS2012,即安装了 .NET Framework4.5,现在要安装AutoCAD2013,而安装CAD2013需要安装4.0的Framework,由于本机已有高版本的Frame ...

  3. it-tidalwave-semantic-aux-1.0.13.jar下载

    今天来给大家分一下一下自己认为还是挺不错的jar包下载网址,it-tidalwave-semantic-aux-1.0.13.jar,作为java开发人员可能时时刻刻都在跟jar包打交道,即使这会用不 ...

  4. 算法笔记_038:特殊回文数(Java)

    目录 1 问题描述 2 解决方案 2.1 80分解法 2.2 网友标答解法   1 问题描述 问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这 ...

  5. QtGui.QLineEdit

    A QtGui.QLineEdit is a widget that allows to enter and edit a single line of plain text. There are u ...

  6. Android开发之定位系统

    2013-07-04 定位系统 全球定位系统(Global Positioning System, GPS), 又称全球卫星定位系统. 最少只需其中3颗卫星,就能迅速确定用户组地球所处的位置及海拔高度 ...

  7. 【PHP】在目标字符串指定位置插入字符串

    PHP如何在指定位置插入相关字符串,例子:123456789变为1_23_456789插入"_"到指定的位置! (可以用作换行或者其他处理) 插入示例,具体思路在代码中有注释: & ...

  8. 【C++】排序算法小结

    1.计数排序 如果给定上下界,并且区间不大的话,最适用. 比如对于英文字母数组进行排序. 时间复杂度O(n),空间复杂度O(n) void countSort(int A[], int n, int ...

  9. Linux下SSH免密码登录(转)

    搭建hadoop集群的时候一定会用到的就是SSH免密码登录 [hadoop@hadoop1 ~]$ ssh-keygen -t rsa Generating public/private rsa ke ...

  10. 对象的序列化存储:Serializable 和 Parceable

    在进行Android开发的时候我们有时候需要用到数据的持久化存储,或者在进程之间传递数据.其中就可能需要用到对象的序列化,经过序列化的对象之后可以通过Intent或者Boundle来传输了.接下来还是 ...