洛谷

题意:

给出一个\(n*m\)的矩阵\(A\)。现要从中选出\(n\)个数,任意两个数不能在同一行或者同一列。

现在问选出的\(n\)个数中第\(k\)大的数的最小值是多少。

思路:

显然二分一下答案,然后找出所有不超过二分答案的边求最大匹配,判断一下是否小于\(n-k+1\)即可。

/*
* Author: heyuhhh
* Created Time: 2019/11/7 15:27:40
*/
#include <bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define INF 0x3f3f3f3f
#define Local
#ifdef Local
#define dbg(args...) do { cout << #args << " -> "; err(args); } while (0)
void err() { std::cout << '\n'; }
template<typename T, typename...Args>
void err(T a, Args...args) { std::cout << a << ' '; err(args...); }
#else
#define dbg(...)
#endif
void pt() {std::cout << '\n'; }
template<typename T, typename...Args>
void pt(T a, Args...args) {std::cout << a << ' '; pt(args...); }
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
//head
const int N = 255, M = 1e5 + 5; int n, m, k;
int val[N][N]; struct Edge{
int v, next;
}e[M];
int head[N], tot;
void adde(int u, int v) {
e[tot].v = v; e[tot].next = head[u]; head[u] = tot++;
} int T, vis[N];
int match[N]; int dfs(int u) {
for(int i = head[u]; i != -1; i = e[i].next) {
int v = e[i].v;
if(vis[v] != T) {
vis[v] = T;
if(match[v] == -1 || dfs(match[v])) {
match[v] = u;
return 1;
}
}
}
return 0;
} bool chk(int x) {
memset(head, -1, sizeof(head)); tot = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(val[i][j] <= x) adde(i, j);
}
}
memset(match, -1, sizeof(match));
int ans = 0;
for(int i = 1; i <= n; i++) {
++T; ans += dfs(i);
}
return ans >= n - k + 1;
} void run(){
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
cin >> val[i][j];
}
}
int l = 1, r = INF, mid;
while(l < r) {
mid = (l + r) >> 1;
if(chk(mid)) r = mid;
else l = mid + 1;
}
cout << l << '\n';
} int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cout << fixed << setprecision(20);
while(cin >> n >> m >> k) run();
return 0;
}

【洛谷P4251】[SCOI2015]小凸玩矩阵(二分+二分图匹配)的更多相关文章

  1. [bzoj4443] [loj#2006] [洛谷P4251] [Scoi2015]小凸玩矩阵

    Description 小凸和小方是好朋友,小方给小凸一个 \(N \times M\)( \(N \leq M\) )的矩阵 \(A\) ,要求小秃从其中选出 \(N\) 个数,其中任意两个数字不能 ...

  2. 【BZOJ4443】[Scoi2015]小凸玩矩阵 二分+二分图最大匹配

    [BZOJ4443][Scoi2015]小凸玩矩阵 Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或 ...

  3. 洛谷 4251 [SCOI2015]小凸玩矩阵

    [题解] 二分答案+二分图匹配. 先二分最小值Min,然后扫一遍这个矩阵,把满足a[i][j]<=Min的i,j连边,之后跑二分图匹配,如果最大匹配数大于等于n-k+1,当前的Min即是合法的. ...

  4. [LUOGU] P4251 [SCOI2015]小凸玩矩阵

    行列看成点,格子看成边,二分一个边权,删去大于它的边,新图上的最大流>k则答案可以更优,小于k则调整左边界. #include<algorithm> #include<iost ...

  5. BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配

    BZOJ_4443_[Scoi2015]小凸玩矩阵_二分+二分图匹配 Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个 ...

  6. 2018.06.30 BZOJ4443: [Scoi2015]小凸玩矩阵(二分加二分图匹配)

    4443: [Scoi2015]小凸玩矩阵 Time Limit: 10 Sec Memory Limit: 128 MB Description 小凸和小方是好朋友,小方给小凸一个N*M(N< ...

  7. BZOJ 4443: [Scoi2015]小凸玩矩阵 最大流

    4443: [Scoi2015]小凸玩矩阵 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4443 Description 小凸和小方是好 ...

  8. bzoj 4443 [Scoi2015]小凸玩矩阵 网络流,二分

    [Scoi2015]小凸玩矩阵 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1564  Solved: 734[Submit][Status][Di ...

  9. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

随机推荐

  1. ORACLE EXPIRED(GRACE)

    查询用户状态col username for a20col account_status for a20select username,account_status,LOCK_DATE,EXPIRY_ ...

  2. EF中嵌套类的where查询

    有一个订单类:Order,在订单Order类中有一个子类,订单详细类OrderDetail. 需求:根据订单详细类的字段过滤数据 public class Order { public string ...

  3. PyCharm将选中的内容加上引号

    正常情况下,选中一段内容,再按引号,内容会被替换为引号 想要将选中的内容不被替换为引号,而在内容的两端加上引号,只需设置一下即可 File  -->  Settings  -->  Edi ...

  4. [Go] go等待读取最后一行的数据内容

    这段代码是参照慕课网的视频教程,主要是f.Seek(0, os.SEEK_END)移动到末尾,但是里面有个小问题,当打开的文件被重新清空内容的清空下,就再也不能到读取数据了,比如在开启读取后 echo ...

  5. Python迭代器的用法,next()方法的调用

    迭代器的用法: 首先说两个概念,一个是可迭代的对象,一个是迭代器对象,两个不同 可迭代的(Iterable):就是可以for循环取数据的,比如字典.列表.元组.字符串等,不可使用next()方法. 迭 ...

  6. Dom对象与jQuery对象的互转

    1.Dom对象转换为jQuery对象 a.直接获取视频,得到就是jQuery对象 $('video'); b.我们已经使用原生js,获取过来 Dom对象 var myvide = document.q ...

  7. 发送get请求接口

    一.简介 python做接口测试,我们需要了解和学习第三方库requests.python内置的urllib模块,也用于访问网络资源,但是使用较麻烦,而且缺少很多实用的高级功能.这里推荐使用reque ...

  8. 2019年最新50道java基础部分面试题(四)

    前35题请移步上几篇文章 36.数组有没有length()这个方法? String有没有length()这个方法?  数组没有length()这个方法,有length的属性.String有有lengt ...

  9. nginx学习(五):nginx.conf 核心配置文件详解

    整体结构 详细信息 1.设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody user root; 2.worker进程工作数设置,一般来 ...

  10. 第05组 Alpha冲刺(4/4)

    第05组 Alpha冲刺(4/4) 队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了 ...