博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ4443】小凸玩矩阵(二分答案,二分图匹配)
阅读量:5299 次
发布时间:2019-06-14

本文共 1691 字,大约阅读时间需要 5 分钟。

【BZOJ4443】小凸玩矩阵(二分答案,二分图匹配)

题面

Description

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

Input

第一行给出三个整数N,M,K

接下来N行,每行M个数字,用来描述这个矩阵

Output

如题

Sample Input

3 4 2

1 5 6 6

8 3 4 3

6 8 6 3

Sample Output

3

HINT

1<=K<=N<=M<=250,1<=矩阵元素<=10^9

题解

看到这种第\(K\)大都直接二分

二分答案,然后因为行列都只能选一个,很明显的二分图匹配。

拆点之后把权值小于二分值的格子连边,直接二分图匹配就行了。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define RG register#define MAX 500inline int read(){ RG int x=0,t=1;RG char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return x*t;}int n,m,g[MAX][MAX],K;struct Line{int v,next;}e[MAX*MAX];int h[MAX],cnt=1;inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}void Build(int Mid){ memset(h,0,sizeof(h));cnt=1; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(g[i][j]<=Mid)Add(i,j);}int match[MAX],vis[MAX],tot;bool dfs(int u){ for(int i=h[u];i;i=e[i].next) { int v=e[i].v; if(vis[v]==tot)continue; vis[v]=tot; if(!match[v]||dfs(match[v])){match[v]=u;return true;} } return false;}int check(){ memset(match,0,sizeof(match)); int ret=0; for(int i=1;i<=n;++i) { ++tot; if(dfs(i))++ret; } return ret;}int main(){ n=read();m=read();K=n-read()+1; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j)g[i][j]=read(); int l=0,r=1e9,ans=1e9; while(l<=r) { int mid=(l+r)>>1; Build(mid); if(check()>=K)ans=mid,r=mid-1; else l=mid+1; } printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/cjyyb/p/8655941.html

你可能感兴趣的文章
Pycharm安装Markdown插件
查看>>
【转】redo与undo
查看>>
C#更新程序设计
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Java Session 介绍;
查看>>
spoj TBATTLE 质因数分解+二分
查看>>
Django 模型层
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
Extjs6 经典版 combo下拉框数据的使用及动态传参
查看>>
【NodeJS】http-server.cmd
查看>>
研磨JavaScript系列(五):奇妙的对象
查看>>
面试题2
查看>>
selenium+java iframe定位
查看>>
P2P综述
查看>>
第五章 如何使用Burp Target
查看>>
Sprint阶段测试评分总结
查看>>
sqlite3经常使用命令&amp;语法
查看>>
linux下编译openjdk8
查看>>
【python】--迭代器生成器装饰器
查看>>
Pow(x, n)
查看>>