先來看看2道最小點覆蓋的裸題:
poj3041:題意是給出乙個n*n的矩陣,有些格仔上有障礙,要求每次消除一行或者一列的障礙,最少消除多少次可以全部清除障礙。做法就是把行和列都看做點,然後障礙物(x,y)就可以看作是x點和y點的邊。這樣問題就轉化成選擇最少的邊(x,y)使得所有的點都被覆蓋。在二分圖中,最小點覆蓋數=最大匹配數。所以可以用匈牙利演算法解決。
**君:
view code
1 #include 2 #include 3 #include 4poj2226:題意是給出的是n*m的矩陣,同樣是有障礙的格仔,要求每次只能消除一行或一列中相鄰的格仔,最少消除多少次可以全部清除。做法和上面一題一樣,只要加一點預處理:掃瞄一遍輸入的矩陣,把每行和每列中相鄰的障礙物看成乙個點,記錄一下,然後加邊。這樣就轉化成了問題1。using
namespace
std;56
const
int maxn = 5555;7
intn, k, x, y, match[maxn];
8bool
vis[maxn];
9 vectoradj[maxn];
1011
void
init()
1516
void addedge(int u, int
v) 19
20bool find(int
u) 28}29
}30return
false;31
}3233int
solve()
40return
result;41}
4243
intmain()
50 printf("
%d\n
", solve());51}
52return0;
53 }
**君:
view code
1/*2先挖個坑
3*/
二分 二分匹配
給了乙個矩陣 n行m列 選n個數 要保證這n個數不在同行同列,計算出第k大的數最小 二分答案,然後我們對於每個a i j mid的我們就i和j建立一條邊 然後二分求最大匹配必須大於等於n k 1 因為是第k大 而不是第k小 坑了好久才發現 include include include includ...
二分匹配演算法
匈牙利演算法求二分匹配 下 include includeusing namespace std int v 頂點數 vectorg max v 圖的鄰接表表示 int match max v 所匹配的頂點 bool used max v dfs 中用到的訪問標記 向圖中增加一條連線 u 和 v 的...
過山車 (二分匹配)
rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partner,grass只願意和l...