BZOJ4443 Scoi2015 小凸玩矩陣

2021-07-11 18:09:57 字數 1212 閱讀 5762

二分答案,若x可行,說明能取出n-k+1個小於等於x的數(為什麼不是k個呢,因為是k大啊不是k小-_-)

判斷的話若(i,j)小於等於x,則第i行向第j列連邊,然後跑最大流看是否大於等於n-k+1即可

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define maxn 1010

#define maxm 150010

#define ll long long

#define inf 1000000000

#define mod 1000000007

#define eps 1e-8

struct vec;

vec mp[maxm];

int tai[maxn],cnt=1;

int q[maxm],hd,tl;

int s,t;

int cur[maxn];

int d[maxn];

int ans;

inline void be(int x,int y,int z)

inline void bse(int x,int y,int z)

bool bfs()}}

return d[t];

}int dfs(int x,int mx)

int y;

ll re=0,tmp;

for(int &i=cur[x];i;i=mp[i].fro)}}

if(!re)

return re;

}int n,m,a[260][260],k;

bool ok(int x)

} }for(i=1;i<=n;i++)

for(i=1;i<=m;i++)

int flow=0;

while(bfs())

flow+=dfs(s,inf);

} return flow>=n-k+1;

}int main()

} int l=0,r=inf;

int ans;

while(l<=r)else

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

return 0;}/*

*/

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

BZOJ 4443 小凸玩矩陣

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