题意
给出一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,求选出来的N个数中第K大的数字的最小值是多少。
1<=K<=N<=M<=250,1<=矩阵元素<=10^9
分析
一眼题。。。
把第k大变成第n-k+1小,二分答案,然后用网络流判断是否能在原图中找到k个点使得任意两点不在同一行同一列且都不大于二分值即可。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=255;
const int inf=0x3f3f3f3f;
int cnt,n,m,map[N][N],last[N*2],dis[N*2],cur[N*2],s,t,ans,k;
struct edge{