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

时间:2022-10-25 23:14:23

【BZOJ4443】[Scoi2015]小凸玩矩阵

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大的最小值,我们采用二分

第k大=第n-k+1小

所以我们二分出第k大的值mid后,只需要满足有n-k+1个符合条件的数字≤mid就行了,这个直接用二分图最大匹配来搞就行

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,k,cnt;
int map[260][260],from[260],head[260],next[260*260],to[260*260],p[260*260],vis[260];
int dfs(int x)
{
for(int i=head[x];i!=-1;i=next[i])
{
if(!vis[to[i]])
{
vis[to[i]]=1;
if(!from[to[i]]||dfs(from[to[i]]))
{
from[to[i]]=x;
return 1;
}
}
}
return 0;
}
void add(int a,int b)
{
to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
}
int check(int sta)
{
int i,j,ans=0;
memset(head,-1,sizeof(head));
cnt=0;
for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(map[i][j]<=sta) add(i,j);
memset(from,0,sizeof(from));
for(i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
ans+=dfs(i);
}
return ans>=k;
}
int main()
{
scanf("%d%d%d",&n,&m,&k),k=n-k+1;
int i,j;
for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&map[i][j]),p[++p[0]]=map[i][j];
sort(p+1,p+p[0]+1);
int l=k,r=p[0]+1,mid;
while(l<r)
{
mid=l+r>>1;
if(check(p[mid])) r=mid;
else l=mid+1;
}
printf("%d\n",p[r]);
return 0;
}

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

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

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

  2. bzoj4443 SCOI2015 小凸玩矩阵 matrix

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 《zw版&&num;183&semi;Halcon-delphi系列原创教程》 Halcon分类函数012&comma;polygon,多边形

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数012,polygon,多边形 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换 ...

  2. web&period;xml的深入学习

    1.过滤器?  监听器?   listener   servlet    filter? 2.命名空间?   schema?  DTD?     xml文件的学习要好好的看下哦!

  3. 第三方登录开发-Facebook

    这次这个项目要分别可以使用新浪微博,qq互联以及Facebook和Twitter授权登录 facebook目前只支持oauth2技术,个人理解其工作流程是当用户想访问当前网站,却不想注册账号,此时当前 ...

  4. Android ListView 中的checkbox

    Q:ListView + CheckBox 当上下滚动的时候有事会自动选中或取消 A:这个与ListView的缓存机制有关.当你屏幕滚动后,ListView中的item选项视图先检查缓存中是否有视图, ...

  5. MySQL查询&lpar;进阶&rpar;&lpar;每个标点都是重点&rpar;

    MySQL 是工作中很普遍的需要用到的,所以必须掌握,而 之前我们一直说的都是怎么存. 你只会存不会取有个屁用.所以希望大家在如何查询读取数据这方面多下点功夫. 这篇和上一篇都是干货,我也是第一次学. ...

  6. jmeter 分布式压测(windows)

    单台压测机通常会遇到客户端瓶颈,受制于客户机的性能.可能由于网络带宽,CPU,内存的限制不能给到服务器足够的压力,这个时候你就需要用到分布式方案来解决客户机的瓶颈,压测的结果也会更加接近于真实情况. ...

  7. Java类的加载及实例的创建

    java中class.forName()和classLoader都可用来对类进行加载.class.forName()前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的sta ...

  8. maven解决omitted for duplicate(依赖冲突)

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  9. checkBox的使用和事件监听

    直接上代码: <!DOCTYPE html> <html> <head> <title></title> </head> &lt ...

  10. c&plus;&plus; 常量指针

    一.指向常量的指针 定义形式: const 类型 * 指针名; 不能通过指针修改地址里的值. int i=0x123; const int *p=&i; *p=; //错误 //前置const ...