传送门

Description

Input

Output

输出包含一行,为选出的 n 个数中第 k 大数的最小值。

Sample Input

输入样例1:

2 3 1

1 2 4

2 4 1

输入样例2:

3 4 2

1 5 6 6

8 3 4 3

6 8 6 3

Sample Output

输出样例1:

1

输出样例2:

3

HINT

Solution

k大值最小,显然可以二分

对于mid若它是第k大数,则一定存在>=n-k-1个比mid小的数

用最大匹配的结果和n-k比较即可

Code

//By Menteur_Hxy
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define int long long
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
#define E(i,u) for(register int i=head[u];i;i=nxt[i])
#define ins(a,b,c) add(a,b,c),add(b,a,0)
#define add(a,b,c) nxt[++cnt]=head[a],to[cnt]=b,cst[cnt]=c,head[a]=cnt
using namespace std; int read() {
int x=0,f=1; char c=getchar();
while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
return x*f;
} const int N=1010,INF=0x3f3f3f3f;
int n,m,k,ans,cnt,S,T;
int nxt[N*N],to[N*N],cst[N*N],head[N<<1],cur[N*N];
int da[N][N],dis[N<<1],que[N<<1]; bool bfs() {
memset(dis,0,sizeof(dis));
int h=0,t=1; que[++h]=S; dis[S]=1;
while(h<=t) {
int u=que[h++];
// cout<<u<<" "<<dis[u]<<endl;
E(i,u) if(!dis[to[i]]&&cst[i]>0)
dis[to[i]]=dis[u]+1,que[++t]=to[i];
}
return dis[T]>0;
} int dfs(int u,int flow) {
if(u==T) return flow;
int used=0;
for(register int &i=cur[u],v;i;i=nxt[i])
if(cst[i]>0&&dis[(v=to[i])]==dis[u]+1) {
// cout<<u<<" "<<v<<endl;
int tmp=dfs(v,min(flow-used,cst[i]));
// cout<<min(flow-used,cst[i])<<" "<<tmp<<endl;
cst[i]-=tmp; cst[i^1]+=tmp;
used+=tmp; if(used==flow) return flow;
}
if(!used) dis[u]=-1;
return used;
} int dinic() {
int res=0;
while(bfs()) {
// cout<<dis[T]<<endl;
F(i,0,n+m+1) cur[i]=head[i];
res+=dfs(S,INF);
}
return res;
} bool jud(int x) {
cnt=1;
memset(head,0,sizeof(head));
F(i,1,n) ins(S,i,1); F(i,1,m) ins(i+n,T,1);
F(i,1,n) F(j,1,m) if(da[i][j]<=x) ins(i,j+n,1);
int res=dinic();
return res>n-k;
} signed main() {
// freopen("1.txt","r",stdin);
n=read(),m=read(),k=read();
S=0; T=n+m+1; ans=INF;
int l=INF,r=0;
F(i,1,n) F(j,1,m)
da[i][j]=read(),l=min(l,da[i][j]),r=max(r,da[i][j]);
while(l<=r) {
int mid=(l+r)>>1;
// cout<<mid<<endl;
if(jud(mid)) ans=min(ans,mid),r=mid-1;
else l=mid+1;
}
printf("%lld",ans);
return 0;
}

[luogu4251 SCOI2015] 小凸玩矩阵 (二分图最大匹配)的更多相关文章

  1. BZOJ 4443: [Scoi2015]小凸玩矩阵 二分图最大匹配+二分

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4443 题解: 二分答案,判断最大匹配是否>=n-k+1: #include< ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 关东升的《从零開始学Swift》即将出版

    大家好: 苹果2015WWDC大会公布了Swift2.0,它较之前的版本号Swift1.x有非常大的变化.所以我即将出版<从零開始学Swift><从零開始学Swift>将在&l ...

  2. select readonly 不能看到其它选项解决方式

    在html中是select readonly后.依旧能够下拉选择.不想做disabled添加隐藏域,以下提供两种解决方式 解决方式1: onfocus="this.defaultIndex= ...

  3. 粗结MySql数据库基础知识点之一

    首先弄什么是数据库? 数据库就是用来存储和管理数据的仓库. 数据库存储数据的优点: 1.可存储大量的数据  2.方便检索  3.保持数据的一致性,完整性  4.安全 可共享  5.通过组合分析,可以产 ...

  4. IPv6系列-初学者的10个常见困扰

    本文是<IPv6系列>文章的第二篇<常见困扰>,紧接<入门指南>,用于解答IPv6的10个常见困扰. 小慢哥的原创文章,欢迎转载 目录 ▪ 本文缘由 ▪ 困扰1. ...

  5. springboot配置过滤器和拦截器

    import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Http ...

  6. 如何对HTMLTestRunner 进行输出print 进行修改

    在 HTMLTestRunner 模块中,在运行代码后,在输入的html页面值出现了特别简单的一个页面,那么现在如何将HTML页面中输出的更多print 在 HTMLTestRunner.py文件中查 ...

  7. Run as ant build每次都执行两次-问题解决

    在Eclipse里面,运行ant,整个测试流程总是执行两遍,其几天试了下在DOS命令行直接调用ant, 结果发现只执行了一次,并且内存消耗好像也没那么大了,估计是eclipse自己的问题.问题解决了, ...

  8. Elasticsearch之更新(全部更新和局部更新)

    前面的基础, Elasticsearch之curl创建索引库 Elasticsearch之curl创建索引 Elasticsearch之curl创建索引库和索引时注意事项 Elasticsearch之 ...

  9. 微信小程序左右滑动切换页面示例代码--转载

    微信小程序——左右滑动切换页面事件 微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend. 这三个事件最重要的属性是pageX和pageY,表示X, ...

  10. 微信小程序特殊字符转义方法——&转义&amp;等等

    在我编写公司小程序的过程中,有一次在网页端添加了一张图片,结果在小程序端访问失败了,究其原因,竟然是因为该图片名称中有一个“&”符号,网页端添加后,自动转义成了“&”存储到了数据库.当 ...