hdu 2236 最大匹配 列舉上下界)

2021-09-06 10:07:19 字數 999 閱讀 4343

思路:

引:為了保證每行每列只取乙個元素,我們可以從二分圖最大匹配的思想入手,把行和列分別看做二分圖左右兩部分,i-j的邊權就是第i行第j列的元素的值。這樣構圖之後,求得的二分圖最大匹配的4條邊就是不在同行或同列的4個元素。

有了這個思想時候,我們只需要再保證4個元素中最大值與最小值之差盡量小就可以了,於是我們可以二分列舉最大值與最小值之差,並列舉邊權值的下界,如果列舉到某個邊權值的下界時該圖存在最大匹配,那麼就更新max,否則就更新min。

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define maxn 111

8int

map[maxn][maxn];

9int

lx[maxn],ly[maxn];

10bool

mark[maxn];

11int

vmax,vmin,min,mid,max,p,n;

12bool

flag;

1314

bool dfs(int

u)23}24

}25return

false;26

}2728bool

hungry()

35return

true;36

}37intmain()49}

50 max=vmax-vmin;

51 min=0;52

while(true)53

58}59if(flag)max=mid;

60if(min==mid)break;61

if(!flag)min=mid;62}

63 printf("

%d\n

",max);64}

65return0;

66 }

view code

HDU 2236 無題II 二分 最大匹配

題目 problem description 這是乙個簡單的遊戲,在乙個n n的矩陣中,找n個數使得這n個數都在不同的行和列裡並且要求這n個數中的最大值和最小值的差值最小。input 輸入乙個整數t表示t組資料。對於每組資料第一行輸入乙個正整數n 1 n 100 表示矩陣的大小。接著輸入n行,每行n...

HDU 2236 無題II 二分 最大匹配

題意 在乙個n n的矩陣中,找n個數使得這n個數都在不同的行和列裡並且要求這n個數中的最大值和最小值的差值最小。分析 二分列舉差值,如果滿足完全匹配則該差值符合。include include define clr x memset x,0,sizeof x int g 105 105 int li...

HDU 1179 (最大匹配)

題意 n個巫師,m個魔杖,求最大匹配 思路 二分圖 求最大匹配 ac 求 n m 的最大匹配 include include include include include includeusing namespace std const int maxn 105 bool used maxn in...