二分答案+最大流。
看到第k大的數的最小值是多少,我們想到二分,把他轉化為最大數最小問題——二分乙個數x,如果有》=n-k+1個數不比它大,那麼它就應當不大於當前數,否則應當大於當前數。
因為每一行一列只能擺放乙個棋子,所以我們把s向每一行連邊,流量為1。每一列向t連邊,流量為1.如果第i行j列的數字小於等於它,就連一下對應行列。然後跑最大匹配即可。qwqwqwq
**如下:
#include#include#include#include#include#include#define maxn 200010
#define s 0
#define t n+m+1
#define inf 0x3f3f3f3f
using namespace std;
int n,m,t=1,k;
int head[maxn<<1],dis[maxn],cur[maxn<<1],a[300][300];
struct edgeedge[maxn<<1];
inline void add(int from,int to,int dis)
inline bool bfs()}}
if(dis[t]==0x3f3f3f3f) return false;
return true;}
inline int dfs(int x,int f)
}return used;}
inline int dinic()
inline bool check(int x)
int main()
printf("%d\n",l);
return 0;
}
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 小凸玩矩陣 題解
題意見題面。我們容易看出,答案肯定是單調的,所以便想到二分,對於判斷能否選到,我們發現行和列的限制就是二分圖匹配的模型,所以直接套個二分圖就好啦。注意 是第k kk大的數!所以判斷時為n k 1 n k 1 n k 1,因為這個wa了好幾遍qaq include include include us...