刷題總結 小凸玩矩陣(scoi)

2022-05-23 14:54:11 字數 1358 閱讀 2494

scoi2015 day1 t1

小凸和小方是好朋友,小方給了小凸乙個 n×m(n≤m)的矩陣 a,並且要求小凸從矩陣中選出 n 個數,其中任意兩個數都不能在同一行或者同一列。

現在小凸想知道,選出的 n 個數中第 k 大的數的最小值是多少。

第 1 行讀入 3 個整數 n,m,k。

接下來 n 行,每一行有 m 個數字,第 i 行第 j 個數字代表矩陣中第 i 行第 j 列的元素 ai,j 。

輸出包含一行,為選出的 n 個數中第 k 大數的最小值。

輸入  [複製]

2 3 1 

1 2 4 

2 4 1

輸出

1

輸入  [複製]

3 4 2 

1 5 6 6 

8 3 4 3 

6 8 6 3

輸出

3

【資料範圍】

對於 20% 的資料,1≤n≤m≤9

對於 40% 的資料,1≤n≤m≤22;1≤n≤12

對於 100% 的資料,1≤k≤n≤m≤250;1≤ai,j≤109

二分加最大匹配(網路流/匈牙利)演算法,列舉已有的數,然後小於該數的連邊建圖,以匹配數為n-k為標準二分答案即可

最開始竟然沒看出來是二分匹配···哎,從行和列不能重複這個條件明顯可以分析出來的··看來對每個條件都要仔細考慮啊···

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=300

;int n,m,map[n][n],first[n],next[n*n],go[n*n],tot=0,maxx=0

,belong[n],k,used[n];

inline

void comb(int a,int

b)inline

void

clear()

inline

bool find(int u,int

t) }

} return

false;}

intmain()

int l=1,r=maxx;

while(l<=r)

cout

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 小凸玩矩陣 題解

題意見題面。我們容易看出,答案肯定是單調的,所以便想到二分,對於判斷能否選到,我們發現行和列的限制就是二分圖匹配的模型,所以直接套個二分圖就好啦。注意 是第k kk大的數!所以判斷時為n k 1 n k 1 n k 1,因為這個wa了好幾遍qaq include include include us...