日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[SCOI2015]小凸玩矩阵 (匈牙利+二分)

發(fā)布時(shí)間:2023/12/3 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [SCOI2015]小凸玩矩阵 (匈牙利+二分) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

description

題目描述

小凸和小方是好朋友,小方給小凸一個(gè) N×M(N≤M)的矩陣 A,要求小凸從其中選出 N 個(gè)數(shù),其中任意兩個(gè)數(shù)字不能在同一行或同一列,現(xiàn)小凸想知道選出來的 N 個(gè)數(shù)中第 K大的數(shù)字的最小值是多少。

輸入格式
第一行給出三個(gè)整數(shù) N、M、K。接下來 N 行,每行 M個(gè)數(shù)字,用來描述這個(gè)矩陣。
輸出格式
輸出選出來的 N個(gè)數(shù)中第 K大的數(shù)字的最小值。

樣例
Input
3 4 2
1 5 6 6
8 3 4 3
6 8 6 3
Output
3

數(shù)據(jù)范圍與提示
1≤K≤N≤M≤250,1≤Ai,j≤10^9

solution

KKK大最小值,明顯套路往二分上面思考

不妨二分最后的答案

那么問題轉(zhuǎn)化為選擇邊的邊權(quán)不超過答案的情況下的最大匹配數(shù)≥n?k+1\ge n -k+1n?k+1

code

#include <cstdio> #include <cstring> #include <iostream> using namespace std; #define maxn 255 int n, m, k, l, r; bool vis[maxn]; int match[maxn]; int matrix[maxn][maxn];bool find( int x, int lim ) {for( int i = 1;i <= m;i ++ ) {if( ! vis[i] && matrix[x][i] <= lim ) {vis[i] = 1;if( ! match[i] || find( match[i], lim ) ) {match[i] = x;return 1;}}}return 0; }int check( int x ) {memset( match, 0, sizeof( match ) );int ans = 0;for( int i = 1;i <= n;i ++ ) {memset( vis, 0, sizeof( vis ) );if( find( i, x ) ) ans ++;}return ans; }int main() {scanf( "%d %d %d", &n, &m, &k );for( int i = 1;i <= n;i ++ )for( int j = 1;j <= m;j ++ ) {scanf( "%d", &matrix[i][j] );r = max( r, matrix[i][j] );}int ans;while( l <= r ) {int mid = ( l + r ) >> 1;if( check( mid ) >= n - k + 1 ) ans = mid, r = mid - 1;else l = mid + 1;}printf( "%d\n", ans );return 0; }

總結(jié)

以上是生活随笔為你收集整理的[SCOI2015]小凸玩矩阵 (匈牙利+二分)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。