SCPO2015 小凸玩矩陣

2022-03-03 16:38:27 字數 858 閱讀 7817

二分答案+最大流。

看到第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...