bzoj4443 Scoi2015 小凸玩矩陣

2021-08-18 18:43:25 字數 860 閱讀 2913

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

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

來自 第k大可以是第n-k+1小,那麼二分答案把不大於mid的點行列連邊,若最大匹配數》n-k+1就可行,否則擴大二分下界

#include 

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

#define fill(x,t) memset(x,t,sizeof(x))

const

int n=200005;

const

int e=800005;

const

int l=505;

struct edge e[e];

int rc[l][l];

int ls[n],edcnt;

int vis[n],link[n];

void add_edge(int x,int y) ; ls[x]=edcnt;

e[++edcnt]=(edge) ; ls[y]=edcnt;

}bool find(int x,int id)

}return

false;

}int hungary(int n)

void build_graph(int n,int m,int lim)

int main(void)

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

return

0;}

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大的數字的最小值是多少。第一行給出三個整數n,m,k 接下來n行,每行m個數字,用來描述這個矩陣 如題 3 4 2 1 5 6 6 8 3 4 ...

BZOJ 4443 小凸玩矩陣

題意 中文題 思路 二分答案,然後比較顯然的網路流建圖之後看看最大流是否大於n k 1就可以了 includeusing namespace std define inf 1e9 100 const int maxn 250 250 100 struct edge struct dinic void...