題意見題面。
我們容易看出,答案肯定是單調的,所以便想到二分,對於判斷能否選到,我們發現行和列的限制就是二分圖匹配的模型,所以直接套個二分圖就好啦。
注意:是第k
kk大的數!!,所以判斷時為n−k
+1
n-k+1
n−k+
1,因為這個wa了好幾遍qaq
#include
#include
#include
using
namespace std;
const
int n=
300,m=
1e6+
1,inf=
1e9;
int n,m,k,s,t;
int mat[n]
[n],ls[m]
,tot;
struct ssss(
int a,
int b,
int c):to
(a),
last
(b),
cap(c)
}g[m<<1]
;int head[n+n]
,cnt;
void
clear()
void
add(
int a,
int b,
int c)
int dep[n+n]
,cur[n+n]
,que[m]
,p,q;
bool
bfs(
) dep[s]=1
;que[p=q=0]
=s;for
(int a;p<=q;p++)}
}return0;
}int
dfs(
int a,
int cap)}if
(!tot)dep[a]=0
;return tot;
}int
maxflow()
bool
check
(int val)
intmain()
}sort
(ls+
1,ls+tot+1)
; tot=
unique
(ls+
1,ls+tot+1)
-ls-1;
int l=
1,r=tot,ans=tot;
while
(l<=r)
printf
("%d\n"
,ls[ans]);
fclose
(stdin);
fclose
(stdout);
return0;
}
SCOI2015 小凸玩矩陣
題目很明顯的乙個事情,求第 k 大的最小值,一般採用的做法是二分 有人會問,但是不滿足二分性啊,接著往下看 考慮二分答案,但是如何檢驗 mid 是對還是錯,考慮每次只能取 mid 的數字,如果能取到 n k 1 個數字以上就可以,至於看能否取到 n k 1 個,採用二分圖匹配,左邊的點是行,右邊的點...
SCOI2015 小凸玩矩陣
題目 洛谷p4251 bzoj4443。題目大意 有乙個 n times m n leq m 的矩陣,要選出n個數,使得這n個數既不同行也不同列。問選的數中第k大的數最小可以是多少。解題思路 首先二分答案,然後只要判斷,是否能選擇至少n k 1個數,它們的值都不超過當前的答案。然後很簡單,對每個小於...
SCOI2015 小凸玩密室
演算法難度5,思維難度7,難度6 給定一棵n nn個點的完全二叉樹,樹邊帶權,點帶val x val x val x 的權值。定義兩個點的距離dis u,v dis u,v dis u,v 為u uu到v vv的最短路徑上經過的邊權之和。你一開始可以選擇乙個起始點,並點亮這個點,這一步不需要花費。你...