博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4443: [Scoi2015]小秃玩矩阵|二分答案|匈牙利
阅读量:5923 次
发布时间:2019-06-19

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

K大看成第K小各种WA。

。。

K大也就是第nK+1小。所以就能够愉快的二分答案了
二分答案找出比当前答案小的数的位置的坐标。推断一下能否够选出满足不在同一行同一列的nK+1个数,然后就能够愉快的跑匈牙利了,对于一个坐标(x,y)假设满足a[x][y]当前答案。就把第x行向第y列连边,然后跑匈牙利推断最大匹配是否大于nK+1
匈牙利真是跑的飞快,然后就卡成rank1 QAQ

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define N 1000001using namespace std;int sc(){ int i=0,f=1; char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i*f;}int a[255][255];int head[N],nxt[N],lst[N],tim[N],from[N];int n,m,tot,mx,TI,K;void insert(int x,int y){ lst[++tot]=y;nxt[tot]=head[x];head[x]=tot;}bool Hungary(int x){ for(int i=head[x];i;i=nxt[i]) if(tim[lst[i]]!=TI) { tim[lst[i]]=TI; if(!from[lst[i]]||Hungary(from[lst[i]])) { from[lst[i]]=x; return 1; } } return 0;}bool jud(int x){ int ans=0;tot=0; for(int i=1;i<=n;i++)head[i]=0; for(int i=1;i<=m;i++)from[i]=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]<=x) insert(i,j); for(int i=1;i<=n;i++) TI++,ans+=Hungary(i); return ans>=K;} int main(){ n=sc();m=sc(),K=sc();K=n-K+1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) mx=max(mx,a[i][j]=sc()); int l=1,r=mx; while(l!=r) { int mid=l+r>>1; if(jud(mid))r=mid; else l=mid+1; } cout<

转载地址:http://tkavx.baihongyu.com/

你可能感兴趣的文章
Java遍历所有网卡打印对应IP
查看>>
ArcGIS Javascript 图层事件绑定
查看>>
超好用的plsql设置
查看>>
Oracle表空间(tablespaces)
查看>>
Python 3.* print 出现SyntaxError: invalid syntax
查看>>
【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能
查看>>
Determining Current Block and Current Item in Oracle Forms
查看>>
Linux学习笔记<五>——<Shell部分>
查看>>
架构师应不应该写代码?
查看>>
C#中string.format用法详解
查看>>
pip依赖安装与记录
查看>>
CSS 最核心的几个概念
查看>>
oauth 2
查看>>
用虚拟 router 连通 subnet - 每天5分钟玩转 OpenStack(141)
查看>>
企业应用开发中最常用c++库
查看>>
mongodb学习笔记之索引(转)
查看>>
外观模式(Facade)
查看>>
python第三方库requests详解
查看>>
ARC下带CF前缀的类型与OC类型转换
查看>>
CSS控制文本超出指定宽度显示省略号和文本不换行效果的实现
查看>>