bzoj 4443 [Scoi2015]小凸玩矩阵 网络流,二分
[Scoi2015]小凸玩矩阵
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1564 Solved: 734
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 5 6 6
8 3 4 3
6 8 6 3
Sample Output
3
HINT
1<=K<=N<=M<=250,1<=矩阵元素<=10^9
判断是否能取出N-K+1个小于等于ans的数
但是能取出N-K+1个小于等于ans的数,不代表能取出K个大于等于ans的数呀
注意,最后得到的ans是最小的存在N-K个比它小的数的数
如果连最小的ans都取不到,那么更大的ans也取不到呀
判断的话若(i,j)小于等于x,则第i行向第j列连边,然后跑最大流看是否大于等于n-k+1即可
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<cstring> 5 #include<cmath> 6 #include<ctime> 7 #include<algorithm> 8 #include<iomanip> 9 #include<vector> 10 #include<stack> 11 #include<queue> 12 #include<map> 13 #include<set> 14 #include<bitset> 15 using namespace std; 16 #define MAXN 1010 17 #define MAXM 150010 18 #define ll long long 19 #define INF 1000000000 20 #define MOD 1000000007 21 #define eps 1e-8 22 struct vec{ 23 int to; 24 int fro; 25 int v; 26 }; 27 vec mp[MAXM]; 28 int tai[MAXN],cnt=1; 29 int q[MAXM],hd,tl; 30 int s,t; 31 int cur[MAXN]; 32 int d[MAXN]; 33 int ans; 34 inline void be(int x,int y,int z){ 35 mp[++cnt].to=y; 36 mp[cnt].fro=tai[x]; 37 tai[x]=cnt; 38 mp[cnt].v=z; 39 } 40 inline void bse(int x,int y,int z){ 41 be(x,y,z); 42 be(y,x,0); 43 } 44 bool bfs(){ 45 int i,x,y; 46 hd=tl=0; 47 q[tl++]=s; 48 memset(d,0,sizeof(d)); 49 d[s]=1; 50 while(hd!=tl){ 51 x=q[hd++]; 52 for(i=tai[x];i;i=mp[i].fro){ 53 y=mp[i].to; 54 if(!d[y]&&mp[i].v){ 55 d[y]=d[x]+1; 56 q[tl++]=y; 57 } 58 } 59 } 60 return d[t]; 61 } 62 int dfs(int x,int mx){ 63 if(x==t){ 64 return mx; 65 } 66 int y; 67 ll re=0,tmp; 68 for(int &i=cur[x];i;i=mp[i].fro){ 69 y=mp[i].to; 70 if(d[y]==d[x]+1&&mp[i].v){ 71 tmp=dfs(y,min(mx,mp[i].v)); 72 re+=tmp; 73 mx-=tmp; 74 mp[i].v-=tmp; 75 mp[i^1].v+=tmp; 76 if(!mx){ 77 return re; 78 } 79 } 80 } 81 if(!re){ 82 d[x]=0; 83 } 84 return re; 85 } 86 int n,m,a[260][260],k; 87 bool OK(int x){ 88 int i,j; 89 s=n+m+1; 90 t=s+1; 91 memset(tai,0,sizeof(tai)); 92 cnt=1; 93 for(i=1;i<=n;i++){ 94 for(j=1;j<=m;j++){ 95 if(a[i][j]<=x){ 96 bse(i,n+j,1); 97 } 98 } 99 } 100 for(i=1;i<=n;i++){ 101 bse(s,i,1); 102 } 103 for(i=1;i<=m;i++){ 104 bse(n+i,t,1); 105 } 106 int flow=0; 107 while(bfs()){ 108 for(i=1;i<=t;i++){ 109 cur[i]=tai[i]; 110 } 111 flow+=dfs(s,INF); 112 } 113 return flow>=n-k+1; 114 } 115 int main(){ 116 int i,j; 117 scanf("%d%d%d",&n,&m,&k); 118 for(i=1;i<=n;i++){ 119 for(j=1;j<=m;j++){ 120 scanf("%d",&a[i][j]); 121 } 122 } 123 int l=0,r=INF; 124 int ans; 125 while(l<=r){ 126 int mid=l+r>>1; 127 if(OK(mid)){ 128 ans=mid; 129 r=mid-1; 130 }else{ 131 l=mid+1; 132 } 133 } 134 printf("%d\n",ans); 135 return 0; 136 } 137 138 /* 139 140 */
转载于:https://www.cnblogs.com/fengzhiyuan/p/8531003.html
bzoj 4443 [Scoi2015]小凸玩矩阵 网络流,二分相关推荐
- bzoj 4443: [Scoi2015]小凸玩矩阵(二分+二分匹配)
4443: [Scoi2015]小凸玩矩阵 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1002 Solved: 505 [Submit][St ...
- BZOJ 4443: [Scoi2015]小凸玩矩阵
二次联通门 : BZOJ 4443: [Scoi2015]小凸玩矩阵 /*BZOJ 4443: [Scoi2015]小凸玩矩阵本来以为是道数据结构题后来想了想发现不可做就考虑二分dp判断推方程推不出来 ...
- [Scoi2015]小凸玩矩阵
bzoj 4443: [Scoi2015]小凸玩矩阵 http://www.lydsy.com/JudgeOnline/problem.php?id=4443 Time Limit: 10 Sec ...
- bzoj 4446: [Scoi2015]小凸玩密室
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 115 Solved: 20 [Submit][Status][Discuss] Descripti ...
- [SCOI2015]小凸玩矩阵 (匈牙利+二分)
description 题目描述 小凸和小方是好朋友,小方给小凸一个 N×M(N≤M)的矩阵 A,要求小凸从其中选出 N 个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的 N 个数中第 ...
- 【bzoj4443】[Scoi2015]小凸玩矩阵 二分+二分图最大匹配
题目描述 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的N个数中第K大的数字的最小值是多少. ...
- 网络流学习总结和省选专练SCOI2015小凸玩矩阵
这是四川连着第几个年头考二分套网络流了? 虽然这是一个二分图最大匹配,但是我匈牙利写挂了. 我太弱了. 好了不瞎扯牛逼了,这个题这么搞: 首先题目就告诉你求第k大最小. 首先这就让人瑟瑟发抖....第 ...
- bzoj4443:[Scoi2015]小凸玩矩阵
传送门 二分答案是显然的啊,然后对于比二分出的值大的直接跑最大匹配,然后判定就好了 代码: #include<cstdio> #include<iostream> #inclu ...
- bzoj-4433 小凸玩矩阵(二分图,二分+匈牙利)
4443: [Scoi2015]小凸玩矩阵 Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列, ...
最新文章
- “六神”——技术提高开发效率的一个方案
- 推荐系统笔记:基于非负矩阵分解的协同过滤
- java word添加图片_Java 替换word文档文字并指定位置插入图片
- 小议ASP.NET模板引擎技术的使用
- mysql事务与jdbc事务_事务(mysql事务、jdbc事务)
- Hive+LDAP+Sentry
- 深层神经网络——多层网络解决异或运算
- linux设置开机启动 服务不支持chkconfig解决方法脚本
- 关于明星投票系统的作业分享
- Mark:SQL Server关于CAST和CONVERT的区别和用法
- uni-app做收货地址功能
- DEA模型及matlab应用2:超效率SE-DEA模型
- 本科课程【数字图像处理】实验1 - 腐蚀与膨胀
- 【无限互联】SDWebImage图片缓存流程分析
- PHPExcel 锁定表头 设置样式,背景颜色,居中,宽,单元格合并
- win10不用密码直接登陆设置
- 为什么要学Markdown?有什么用?
- 隐患重重遭诟病 细数固态硬盘“七宗罪”
- Next '21 大会倒计时 1 天丨与 Google Cloud 一起寻找打开数字化的“云钥匙”
- 华为 ACL与DHCP配置