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

时间:2023-01-30 16:33:36

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

(上不了p站我要死了,侵权度娘背锅)

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大的数字最小”。也就是说选一个值x,可以找到n-k+1个属性不同的物品的值满足小于等于x的(包括自己嘛)。

为什么不能直接二分寻找大于x的匹配呢?因为我们要求的是最小值,而直接找第k大会找到满足条件的最大值。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; template <typename T>inline void read(T &res){
T k=1,x=0;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-')k=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
res=x*k;
} const int N=260; int n,m,k,c[N][N],maxn=0;
int bl[N];
bool vis[N]; bool find(int x,int lim){
for(int i=1;i<=m;i++){
if((!vis[i])&&c[x][i]<=lim){
vis[i]=1;
if(bl[i]==0||find(bl[i],lim)){
bl[i]=x;
return true;
}
}
}
return false;
}
int ck(int x){
int cnt=0;
memset(bl,0,sizeof(bl));
for(int i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
if(find(i,x)) cnt++;
}
return cnt;
}
int erfen(){
int le=1,ri=maxn;
while(le<ri){
int mid=(le+ri)>>1;
if(ck(mid)>=n-k+1) ri=mid;
else le=mid+1;
}
return le;
}
int main(){
read(n),read(m),read(k);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) read(c[i][j]),maxn=max(maxn,c[i][j]);
printf("%d\n",erfen());
return 0;
}

【bzoj4443】【[Scoi2015]小凸玩矩阵】二分+二分图最大匹配的更多相关文章

  1. 【BZOJ4443】&lbrack;Scoi2015&rsqb;小凸玩矩阵 二分&plus;二分图最大匹配

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

  2. 2018&period;06&period;30 BZOJ4443&colon; &lbrack;Scoi2015&rsqb;小凸玩矩阵(二分加二分图匹配)

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

  3. bzoj4443 SCOI2015 小凸玩矩阵 matrix

    传送门:bzoj4443 题解 很水的一道网络流,显然可以二分答案,然后我们希望第\(k\)大尽量小,那么对于一个\(mid\),我们应尽量选择更小的,然后跑二分图最大匹配来验证. code

  4. bzoj4443&lbrack;SCOI2015&rsqb;小凸玩矩阵

    题意:一个n*m的矩阵(n<=m<=250),要求选出n个数(每行,每列最多选一个),求第k大数的最小值. 首先第k大的意思是从大到小的第k个数(我读错了,WA了一次还以为算法不对...) ...

  5. BZOJ&lowbar;4443&lowbar;&lbrack;Scoi2015&rsqb;小凸玩矩阵&lowbar;二分&plus;二分图匹配

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

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

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

  7. bzoj 4443 &lbrack;Scoi2015&rsqb;小凸玩矩阵 网络流&comma;二分

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

  8. BZOJ 4443&colon; &lbrack;Scoi2015&rsqb;小凸玩矩阵 最大流

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

  9. LibreOJ &num;2006&period; 「SCOI2015」小凸玩矩阵 二分答案&plus;二分匹配

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

随机推荐

  1. PXE网络启动提示no default or ui configuration directive问题解决

    按照 https://help.ubuntu.com/community/DisklessUbuntuHowto 的提示配置完系统,准备网络启动的时候,遇到: Trying to load pxeli ...

  2. DEV控件:gridControl常用属性设置(转载)

    特别长,先撸下来再说 1.隐藏最上面的GroupPanel  gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值  sValue=T ...

  3. Hadoop - Kylin On OLAP

    1.概述 Apache Kylin是一个开源的分布式分析引擎,提供SQL接口并且用于OLAP业务于Hadoop的大数据集上,该项目由eBay贡献于Apache. 2.What is Kylin 在使用 ...

  4. QML官方系列教程——QML Applications

    附网址:http://qt-project.org/doc/qt-5/qmlapplications.html 假设你对Qt的官方demo感兴趣,能够參考本博客的另一个系列Qt5官方demo解析集 每 ...

  5. Android URI简介

    就Android平台而言,URI主要分三个部分:scheme, authority and path.其中authority又分为host和port.格式如下:scheme://host:port/p ...

  6. crontab定时任务不执行的原因

    1.重启crontab若是遇见"You (cloudlogin) are not allowed to use this program (crontab)                 ...

  7. FutureBuilder的使用以及防止FutureBuilder不必要重绘的两种方法

    https://blog.csdn.net/u011272795/article/details/83010974 https://segmentfault.com/a/119000001421934 ...

  8. BZOJ3064 Tyvj 1518 CPU监控 线段树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3064 题意概括 一个序列,要你支持以下操作: 1. 区间询问最大值 2. 区间询问历史最大值 3. ...

  9. Qt编写自定义控件1-汽车仪表盘

    前言 汽车仪表盘几乎是qt写仪表盘控件中最常见的,一般来说先要求美工做好设计图,然后设计效果图给到程序员,由程序员根据效果来实现,主要靠贴图,这种方法有个好处就是做出来的效果比较逼真,和真实效果图基本 ...

  10. Objective-C 资源收藏

    日志 https://github.com/robbiehanson/CocoaLumberjack 反汇编 otool      nm http://*.com/questi ...