无题II
无题II
Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1303    Accepted Submission(s): 583
对于每组数据第一行输入一个正整数n(1<=n<=100)表示矩阵的大小。
接着输入n行,每行n个数x(0<=x<=100)。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std; #define INF 99999999
int g[][];
int mk[];
int cy[];
int t;
int n;
int inmax;
int inmin;
int mmmin;
int mmmax; void init()
{
memset(g,,sizeof(g));
memset(mk,,sizeof(mk));
memset(cy,0xff,sizeof(cy));
} int path(int u)
{
int v;
for(v=;v<=n;v++)
{
if(g[u][v]>=mmmin&&g[u][v]<=mmmax&&!mk[v])
{
mk[v]=;
if(cy[v]==-||path(cy[v]))
{
cy[v]=u;
return true;
}
}
}
return false;
} int maxmatch()
{
int i;
memset(cy,0xff,sizeof(cy));
for(i=;i<=n;i++)
{
memset(mk,,sizeof(mk));
if(!path(i))
{
return false;
}
}
return true;
} int main()
{
scanf("%d",&t);
while(t--)
{
init();
scanf("%d",&n);
int i,j;
inmax=-INF,inmin=INF;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
scanf("%d",&g[i][j]);
if(g[i][j]>inmax)inmax=g[i][j];
if(g[i][j]<inmin)inmin=g[i][j];
}
}
//二分差值
int rmax=inmax-inmin;
int rmin=;
while(rmin<=rmax)
{
int mid=(rmin+rmax)>>;
for(i=;i<=inmax;i++)
{
mmmin=i;
mmmax=i+mid;
if(maxmatch())
break;
}
if(maxmatch()) //表示这个区间段在mmmin在mmmax之间
rmax=mid-; //区间缩小
else
rmin=mid+; //不满足扩大区间
}
printf("%d\n",rmax+);
}
return ;
}
无题II的更多相关文章
- HDU 2236 无题II(二分图匹配+二分)
		HDU 2236 无题II 题目链接 思路:行列仅仅能一个,想到二分图,然后二分区间长度,枚举下限.就能求出哪些边是能用的,然后建图跑二分图,假设最大匹配等于n就是符合的 代码: #include & ... 
- HDU 2236:无题II(二分搜索+二分匹配)
		http://acm.hdu.edu.cn/showproblem.php?pid=2236 题意:中文题意. 思路:先找出最大和最小值,然后二分差值,对于每一个差值从下界开始枚举判断能不能二分匹配. ... 
- 无题II hdu 2236(二分枚举区间)
		分析:只需要用二分找一个区间,然后不断枚举这个区间是否可以达到最大匹配,一直二分到答案为止. 代码: =============================================== ... 
- (二分匹配“匈牙利算法”)无题II  --HDU --2236
		链接: http://acm.hdu.edu.cn/showproblem.php?pid=2236 代码: #include<cstdio> #include<cstring> ... 
- Hdu 2236       无题II     最大匹配+二分
		题目链接: pid=2236">Hdu 2236 解题思路: 将行和列理解为二分图两边的端点,给出的矩阵即为二分图中的全部边, 假设二分图能全然匹配,则说明 不同行 不同列的n个元素 ... 
- HDU-2236 无题II
		选取不同列不同行的N个数...明摆着叫你二分匹配 二分答案,然后枚举边的范围并跑匈牙利,以此判断答案范围. #include <cstdlib> #include <cstdio&g ... 
- hdu2236  无题II    最大匹配 + 二分搜索
		中文题目,题意大家都明白. 看到“不同的行和列”就觉得要用二分匹配来做.要求最大值与最小值的差值最小,是通过枚举边的下限和上限来完成. 枚举过程是这样的,在输入的过程可以记录下边权的最大值MAX和最小 ... 
- 无题II HDU - 2236 【二分图+二分答案】
		题目 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. Input 输入一个整数T表示T组数据. 对于每组数据第一行输入一 ... 
- HDU 2236 无题II 题解
		题目 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. 输入格式 输入一个整数\(T\)表示\(T\)组数据. 对于每组数 ... 
随机推荐
- Matlab入门基础
			matlab入门篇,一些基础用法记一下~ M语言是解释型语言  who:查看当前变量  whoes:查看当前变量及其维数.所占字节数等.  clear: 清除所有变量  clear + 变量名 ... 
- SQL server 2008r2 file is corrupt
			下载的SQLManagement studio有问题,重新下载一遍后再安装就好了.安装顺序没问题. 在卸载SQL Server开始——运行:输入regedit 进入注册表编辑器,进入之后执行下列操作: ... 
- levelDB SSTable-静态布局结构
			SSTable是Bigtable中至关重要的一块,对于LevelDB来说也是如此,对LevelDB的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节. 本节内容主要讲述S ... 
- HDU-6187.DestroyWalls(最大生成树)
			好吧这个题没什么可说的,有点.... 一开始还和一位大佬在讨论,会不会有多余的边,后面看了题发现没有多于的边和自环,所以之间一波最大生成树把最大的边去掉,把最小的边推倒就行了. #include &l ... 
- [2019杭电多校第五场][hdu6629]string matching(扩展kmp)
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6629 题意求字符串的每个后缀与原串的最长公共前缀之和. 比赛时搞东搞西的,还搞了个后缀数组...队友一 ... 
- RMQ  的入门  hdu1806
			RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大值 ... 
- LED音乐频谱之点阵
			转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/37967455 一.硬件 watermark/2/text/aHR0cDovL2 ... 
- Ubuntu中找不到pip3命令的解决方法
			Ubuntu中找不到pip3命令的解决方法 Ubuntu 有 python2 和 python3. 今天使用 Ubuntu 中的 python3 时,想要安装第三方库却发现 pip 指向的是 pyth ... 
- Java基础学习(4)
			Java基础学习(四) String类 特点:创建后不可再修改,看起来的修改只是创建了新的对象 常用方法 StringBuilder类 目的:解决String类频繁创建对象的问题 常用方法 特点:非线 ... 
- paste - 合并文件各行
			总览 (SYNOPSIS) ../src/paste [OPTION]... [FILE]... 描述 (DESCRIPTION) 连续 依次 从 各个 文件 FILE 中 读取 一行 然后 合并成 ... 
