BZOJ 4443 小凸玩矩陣

2021-07-11 12:46:33 字數 1096 閱讀 7358

題意:中文題

思路:二分答案,然後比較顯然的網路流建圖之後看看最大流是否大於n-k+1就可以了

#includeusing namespace std;

#define inf 1e9+100

const int maxn = 250*250+100;

struct edge

};struct dinic

void init(int n)

bool bfs()

}} return vis[t];

} int dfs(int x,int a)

} return flow;

} int maxflow(int s,int t)

return flow;

}}di;

int mp[252][252];

int n,m,k;

bool check(int x)

for (int j = 1;j<=m;j++)

di.addedge(n+j,t,1);

if (di.maxflow(s,t)>=n-k+1)

return 1;

return 0;

}int main()

printf("%d\n",ans);

}}

description

小凸和小方是好朋友,小方給小凸乙個n*m(n<=m)的矩陣a,要求小禿從其中選出n個數,其中任意兩個數字不能在同一行或同一列,現小凸想知道選出來的n個數中第k大的數字的最小值是多少。

input

第一行給出三個整數n,m,k

接下來n行,每行m個數字,用來描述這個矩陣

output

如題 

sample input

3 4 2

1 5 6 6

8 3 4 3

6 8 6 3

sample output

3

hint

1<=k<=n<=m<=250,1<=矩陣元素<=10^9

BZOJ4443 Scoi2015 小凸玩矩陣

二分答案,若x可行,說明能取出n k 1個小於等於x的數 為什麼不是k個呢,因為是k大啊不是k小 判斷的話若 i,j 小於等於x,則第i行向第j列連邊,然後跑最大流看是否大於等於n k 1即可 include include include include include include inclu...

bzoj4443 Scoi2015 小凸玩矩陣

小凸和小方是好朋友,小方給小凸乙個n m n m 的矩陣a,要求小禿從其中選出n個數,其中任意兩個數字不能在同一行或同一列,現小凸想知道選出來的n個數中第k大的數字的最小值是多少。1 k n m 250,1 矩陣元素 10 9 來自 第k大可以是第n k 1小,那麼二分答案把不大於mid的點行列連邊...

BZOJ4443 Scoi2015 小凸玩矩陣

小凸和小方是好朋友,小方給小凸乙個n m n m 的矩陣a,要求小禿從其中選出n個數,其中任意兩個數字不能在同一行或同一列,現小凸想知道選出來的n個數中第k大的數字的最小值是多少。第一行給出三個整數n,m,k 接下來n行,每行m個數字,用來描述這個矩陣 如題 3 4 2 1 5 6 6 8 3 4 ...