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...