Description:

给你一个n*m的网格,每个格子有一个数字,每行每列只能选一个数字,问所选数字中第k大的数字的最小值是多少

Hint:

\(n \le 250\)

Solution:

显然是二分图模型,但是有附加条件

初看十分不可做,主要原因是这个第k大

我们可以考虑二分一个答案,只对小于这个答案的格子建图

这样就转化成了一个判定性问题,根据每次的最大流与k的大小关系来判断

#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define ls p<<1
#define rs p<<1|1
using namespace std;
typedef long long ll;
const int mxn=1e5+5,inf=1e9;
int n,m,k,cnt;
int S,T,ans,sum,a[555][555],hd[mxn],dep[mxn],cur[mxn]; inline int read() {
char c=getchar(); int x=0,f=1;
while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
while(c<='9'&&c>='0') {x=(x<<3)+(x<<1)+(c&15);c=getchar();}
return x*f;
}
inline void chkmax(int &x,int y) {if(x<y) x=y;}
inline void chkmin(int &x,int y) {if(x>y) x=y;} struct ed {
int to,nxt,w;
}t[mxn<<1]; inline void add(int u,int v,int w) {
t[++cnt]=(ed) {v,hd[u],w}; hd[u]=cnt;
t[++cnt]=(ed) {u,hd[v],0}; hd[v]=cnt;
} int bfs() {
queue<ll > q; q.push(S);
memset(dep,0,sizeof(dep)); dep[S]=1;
for(ll i=S;i<=T;++i) cur[i]=hd[i];
while(!q.empty()) {
ll u=q.front(); q.pop();
for(ll i=hd[u];i!=-1;i=t[i].nxt) {
ll v=t[i].to;// cout<<t[i].w<<"\n";
if(!dep[v]&&t[i].w>0)
dep[v]=dep[u]+1,q.push(v);
}
}
return dep[T];
} int dfs(ll u,int f) {
if(u==T) return f;
for(int &i=cur[u];i!=-1;i=t[i].nxt) {
ll v=t[i].to;
if(dep[v]==dep[u]+1&&t[i].w>0) {
int tp=dfs(v,min(t[i].w,f));
if(tp>0) {
t[i].w-=tp;
t[i^1].w+=tp;
return tp;
}
}
}
return 0;
} void Dinic() {
while(bfs())
while(ll tp=dfs(S,inf))
ans+=tp;
} int main()
{
n=read(); m=read(); k=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
a[i][j]=read();
int l=1,r=inf;
while(l<r) {
int mid=(l+r)>>1; T=n+m+1;
memset(hd,-1,sizeof(hd)); cnt=-1,ans=0;
for(int i=1;i<=n;++i) add(S,i,1);
for(int i=1;i<=m;++i) add(i+n,T,1);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j) {
if(a[i][j]>mid) continue ;
add(i,j+n,inf);
}
Dinic();
if(ans>=n-k+1) r=mid;
else l=mid+1;
}
printf("%d",r);
return 0;
}

[SCOI2015]小凸玩矩阵的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 图论(网络流):[SCOI2015]小凸玩矩阵

    Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的N个数中第K大的数字的最 ...

  7. 【刷题】BZOJ 4443 [Scoi2015]小凸玩矩阵

    Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的N个数中第K大的数字的最 ...

  8. bzoj 4443: [Scoi2015]小凸玩矩阵

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 149  Solved: 81[Submit][Status][Discuss] Description ...

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

    (上不了p站我要死了,侵权度娘背锅) Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸 ...

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

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

随机推荐

  1. java(11)带参数的方法

    一.java中的包(package) 1.1 包,对应到磁盘中的文件夹 1.2 新建一个class,默认保存在缺省包中 1.3 声明包的关键字:package package语句,置顶位置 1.4 导 ...

  2. json 格式化的时候,日期格式化

    public class CustomIsoDateTimeConverter : IsoDateTimeConverter { public CustomIsoDateTimeConverter() ...

  3. Asp.net 项目部署的两个问题

    1:关于MVC中BundleCollection压缩js css文件 发布后获取失败的问题 原因是: 默认本地vs里面调试的时候,因为web.config文件里面有一个debug属性,当有此属性时,默 ...

  4. KML,SHP TAB互转,GDAL

    最近在接触地图数据转换的东西,从硬件kml的数据转换其他的格式,因为从没做过着东西, 先去了解kml文件格式 http://baike.baidu.com/view/400307.htm?fr=ala ...

  5. day 21 - 2 练习

    三级菜单 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, 'google': {}, '网易': {} }, '中关村': { '爱奇艺': {}, '汽车 ...

  6. 吴恩达《机器学习》课程笔记——第七章:Logistic回归

    上一篇  ※※※※※※※※  [回到目录]  ※※※※※※※※  下一篇 7.1 分类问题 本节内容:什么是分类 之前的章节介绍的都是回归问题,接下来是分类问题.所谓的分类问题是指输出变量为有限个离散 ...

  7. 前端笔记知识点整合之JavaScript(二)关于运算符&初识条件判断语句

    运算符 数学运算符的正统,number和number的数学运算,结果是number.出于面试的考虑,有一些奇奇怪怪的数学运算: 数学运算中:只有纯字符串.布尔值.null能够进行隐式转换.   //隐 ...

  8. Andriod studio 目录结构

    新建一个项目后,大致有一下几个目录 1)gradle 目录 构建工具系统的jar和wrapper等,jar告诉了AS如何与系统安装的gradle构建联系. 2).idea 目录 AS生成的工程配置文件 ...

  9. 跨域资源共享(CORS)

    同源策略 同源策略是浏览器的一个安全策略,只允许当前页面或当前域下发送请求,如果向其他域发送请求,会被浏览器拦截 同源的意思:协议.IP地址.端口三者一致,浏览器才会认为是同一个域,三者中有一个不一致 ...

  10. The import javax.servlet.jsp.JspException cannot be resolved

    问题描述   重新更换了 Apache Tomcat 的版本,在 Eclipse 中项目报错信息:The import javax.servlet.jsp.JspException cannot be ...