#2006. 「SCOI2015」小凸玩矩阵

 

题目描述

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

输入格式

第一行给出三个整数 N NN、M MM、K KK。
接下来 N NN 行,每行 M MM 个数字,用来描述这个矩阵。

输出格式

输出选出来的 N NN 个数中第 K KK 大的数字的最小值。

样例

样例输入

3 4 2
1 5 6 6
8 3 4 3
6 8 6 3

样例输出

3

数据范围与提示

1≤K≤N≤M≤250,1≤Ai,j≤109 1 \leq K \leq N \leq M \leq 250, 1 \leq A_{i, j} \leq 10 ^ 91≤K≤N≤M≤250,1≤A​i,j​​≤10​9​​

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,k,map[][],a[],b[],ans=0x3f3f3f3f;
bool vis[];
int cmp(int x,int y){return x>y;}
void check(){
for(int i=;i<=n;i++)b[i]=a[i];
sort(b+,b+n+,cmp);
ans=min(ans,b[k]);
}
void dfs(int now){
if(now==n+){
check();
return;
}
for(int i=;i<=m;i++){
if(!vis[i]){
vis[i]=;
a[now]=map[now][i];
dfs(now+);
vis[i]=;
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&k);
int x;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&map[i][j]);
dfs();
printf("%d",ans);
}

20分 暴力

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 510
#define INF 1000000000
using namespace std;
int S,T,num=,head[maxn],n,m,k,dis[maxn],a[maxn][maxn];
struct node{int to,pre,v;}e[maxn*maxn];
void Insert(int from,int to,int v){
e[++num].to=to;e[num].v=v;e[num].pre=head[from];head[from]=num;
e[++num].to=from;e[num].v=;e[num].pre=head[to];head[to]=num;
}
int dinic(int x,int flow){
if(x==T||flow==)return flow;
int rest=flow;
for(int i=head[x];i;i=e[i].pre){
int to=e[i].to;
if(dis[to]==dis[x]+&&e[i].v>){
int delta=dinic(to,min(e[i].v,rest));
e[i].v-=delta;
e[i^].v+=delta;
rest-=delta;
}
}
return flow-rest;
}
bool spfa(){
memset(dis,-,sizeof(dis));
queue<int>q;q.push(S);dis[S]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(dis[to]==-&&e[i].v>){
dis[to]=dis[now]+;
if(to==T)return ;
q.push(to);
}
}
}
return dis[T]!=-;
}
int work(){
int res=;
while(spfa()){
res+=dinic(S,INF);
}
return res;
}
bool check(int x){
memset(head,,sizeof(head));num=;
for(int i=;i<=n;i++)Insert(S,i,);
for(int i=;i<=m;i++)Insert(i+n,T,);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(a[i][j]<=x)Insert(i,j+n,);
int res=work();
if(res>=n-k+)return ;
return ;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
S=;T=n+m+;
int mx=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("%d",&a[i][j]);
mx=max(mx,a[i][j]);
}
int l=,r=mx,ans=;
while(l<=r){
int mid=(l+r)>>;
if(check(mid))r=mid-,ans=mid;
else l=mid+;
}
printf("%d",ans);
}

100分 二分答案+网络流

loj #2006. 「SCOI2015」小凸玩矩阵的更多相关文章

  1. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

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

  2. 【LOJ】#2006. 「SCOI2015」小凸玩矩阵

    题解 又是美好的一天,我今天的小目标是LOJ刷题数名次前进两名(虽然巨佬们都是BZOJ千题啊这样的><,我就在LOJ划划水吧,我永远喜欢LOJ 这道题要求K大值最小,又是什么什么大值最小, ...

  3. LibreOJ #2006. 「SCOI2015」小凸玩矩阵

    想了挺久没想出来,一看题解恍然大悟.一个数对应一行和一列,二分答案,凡是小于等于答案的就连边.如果满足能够取出 \(n - k + 1\) 个不比二分中点 \(mid\) 大的数,那么r = mid, ...

  4. loj#2009.「SCOI2015」小凸玩密室

    题目链接 loj#2009. 「SCOI2015」小凸玩密室 题解 树高不会很高<=20 点亮灯泡x,点亮x的一个子树,再点亮x另外的子树, 然后回到x的父节点,点亮父节点之后再点亮父节点的其他 ...

  5. AC日记——「SCOI2015」小凸玩矩阵 LiBreOJ 2006

    「SCOI2015」小凸玩矩阵 思路: 二分+最大流: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 300 ...

  6. 「SCOI2015」小凸玩矩阵 解题报告

    「SCOI2015」小凸玩矩阵 我好沙茶啊 把点当边连接行和列,在外面二分答案跑图的匹配就行了 我最开始二分方向搞反了,样例没过. 脑袋一抽,这绝壁要费用流,连忙打了个KM 然后wa了,一想这个不是完 ...

  7. 「SCOI2015」小凸玩矩阵

    题目链接 问题分析 题目给了充足的暗示,我们只需要二分答案然后跑匈牙利即可.要相信匈牙利的速度 参考程序 #include <bits/stdc++.h> using namespace ...

  8. 「SCOI2015」小凸玩密室 解题报告

    「SCOI2015」小凸玩密室 虽然有心里在想一些奇奇怪怪的事情的原因,不过还是写太久了.. 不过这个题本身也挺厉害的 注意第一个被点亮的是任意选的,我最开始压根没注意到 \(dp_{i,j}\)代表 ...

  9. —Libre#2009. 「SCOI2015」小凸玩密室

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

随机推荐

  1. java代码继承难点。构造方法的调用

    总结:子类默认调用父类的无参构造方法.重写时,父类方法将被覆盖,不被调用,在子类中可以使用super.方法():可以实现 运行显示: evente.x:55 evente.x:55 B.y:57 pa ...

  2. 西安电子科技大学第16届程序设计竞赛 B Words Game

    链接:https://www.nowcoder.com/acm/contest/107/B来源:牛客网 Words Game 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 13107 ...

  3. MacOS配置Erlang开发环境

    Mac下安装Erlang brew 的安装: $ curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C ...

  4. windows黑科技-记录dns log

    昨天看到袁哥微博,看到了这篇,今天测试了一下,记录下来: The DNS Client service does not log by default. However, if a file name ...

  5. PDM生成数据库-0设置表名和字段名中不带双引号

    如果PDM直接导出脚本的话,所有的表和字段都会被加上双引号,非常不方便,去除双引号的办法: Database->Edit Current DBMS在弹出窗体中第一项General中找到 Scri ...

  6. PowerDesigner的CDM模型将低驼峰命名法则的每个大写字母前加_符

    Option   Explicit ValidationMode   =   True InteractiveMode =   im_Batch Dim   mdl   '当前model '获取当前活 ...

  7. Qt creator 使用qwt

    .pro中添加 LIBS += -L”C:\Qt\Qt5.3.2\5.3\msvc2013_opengl\lib” -lqwt INCLUDEPATH += "C:\Qt\Qt5.3.2\5 ...

  8. 使用ffmpeg压缩视频

    命令: ffmpeg -i 1.avi -b 64k 1-64k.avi ffmpeg下载:http://dl.pconline.com.cn/download/53703.html

  9. [poj1509]Glass Beads(最小表示法)

    题目大意:求循环同构的字符串的最小字典序. 解题关键:最小表示法模板题. #include<cstdio> #include<cstring> #include<algo ...

  10. 关于WebGIS开源解决方案的探讨(转)

    关于WebGIS开源解决方案的探讨   文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 公司目前的多数项目采 ...