hdoj 2236 无题II
来源:互联网 发布:建筑设计mars软件简介 编辑:程序博客网 时间:2024/04/29 11:44
题目链接:无题II
题目大意:有一个n*n的矩阵,问能不能选n个数,这n个数行和列都不同,而且最大值和最小值之间的差尽可能需要小,问这个最小差值
题目思路:我们去二分这个这个差值,然后枚举下界,判断符合条件的数,然后行和列连接一条边,然后跑一个二分图最大匹配看是不是n就好了
#include <map>#include <set>#include <stack>#include <queue>#include <cmath>#include <vector>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int maxn = 110;int line[maxn][maxn],used[maxn],nxt[maxn];int mat[maxn][maxn],num[maxn],cnt;int T,n;bool Find(int x){ for(int i = 1;i <= n;i++){ if(line[x][i]&&!used[i]){ used[i] = 1; if(nxt[i] == 0||Find(nxt[i])){ nxt[i] = x; return true; } } } return false;}int match(){ int sum = 0; for(int i = 1;i <= n;i++){ memset(used,0,sizeof(used)); if(Find(i)) sum++; else break; } return sum;}void handle(int x){ for(int i = 0;i < cnt;i++){ if(num[i] == x) return ; } num[cnt++] = x;}bool judge(int mid){ for(int i = 0;i < cnt;i++){ memset(line,0,sizeof(line)); for(int j = 1;j <= n;j++){ for(int k = 1;k <= n;k++){ if(mat[j][k] >= num[i]&&mat[j][k] <= num[i]+mid) line[j][k] = 1; } } memset(nxt,0,sizeof(nxt)); int ans = match(); if(ans == n) return true; } return false;}int main(){ scanf("%d",&T); while(T--){ cnt = 0; scanf("%d",&n); for(int i = 1;i <= n;i++){ for(int j = 1;j <= n;j++){ scanf("%d",&mat[i][j]); handle(mat[i][j]); } } int l = 0,r = 210,ans; sort(num,num+cnt); while(l <= r){ int mid = (l+r)>>1; if(judge(mid)) ans = mid,r = mid-1; else l = mid+1; } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- hdoj 2236 无题II
- HDOJ 2236 - 无题II 暴力+二分图最大匹配判断
- hdoj 2236 无题II 【二分图匹配&&匈牙利算法】
- hdu 2236 无题II
- hdu 2236 无题II
- HDU 2236 无题II //MaxMatch
- 【HDU】2236 无题II 二分+二分匹配
- hdu 2236 无题II 二分 + 二分匹配
- Hdu 2236 无题II 最大匹配+二分
- HDU 2236 无题II 二分+最大匹配
- hdoj-1871-无题
- HDU 2236 无题II(二分图匹配+二分)
- 【匈牙利匹配】无题II HDU2236
- hdoj 无题 1871 (结构体 水)
- HDU 2236(无题II) 二分匹配(匈牙利,HK)+二分查找
- hdu 2236 无题II(二分法,枚举,二分图最大匹配)
- HDU 2236 无题II(二分匹配模板题,匈牙利算法)
- hdu2236 无题II (二分+最大匹配)
- Linux中的搜索命令
- Storm集群搭建
- Josh Bloch
- Java并发编程:深入剖析ThreadLocal
- js实现复制到剪贴板功能,兼容所有浏览器
- hdoj 2236 无题II
- 在linux下面实现检测按键----实现Linux 下的kbhit函数
- Redis常用数据类型及基本操作
- github学习
- 注入嵌套Bean
- 物理页面的使用和周转
- centos7.2安装jdk1.8
- permutations
- 移动端前端车牌识别SDK授权