證明:最大獨立數=未匹配的節點+匹配數/2 (1)
(設n=匹配數/2,可以理解為去掉二分圖某側匹配好的n個節點,在另一側對應的n個節點就沒有相匹配的了)
而 未匹配的節點=頂點數-匹配數 (2)
由(1)(2)得: 最大獨立數=頂點數-匹配數的一半
1//file name: 1466.cpp2//
author: missa3//
created time: 2013/2/11 星期一 20:24:26
45 #include6 #include7 #include8 #include9 #include10 #include11 #include12 #include
13 #include14 #include15 #include16
using
namespace
std;
17#define cl(x,y) memset(x,y,sizeof(x));
1819
const
int maxn = 5e2+5;20
intn;
21bool
vis[maxn];
22int
ma[maxn][maxn];
23int
link[maxn];
24bool dfs(int
x)2536}
37}38return
false;39
}40intmaxmatch()
4149
return
c;50}51
52int
main()
5366
}67 printf("
%d\n
",n-maxmatch()/2
);68}69
return0;
70 }
匈牙利演算法之POJ1466
題目連線 這個題目注意.遍歷的點是全部的點.而並不是類似前面的題目一樣僅僅是遍歷x,y其中的乙個集合.對於這樣的題目來說的話.做法一就是變成比較標準的二部圖的形式,外部遍歷x,內部遍歷y.如果直接在內部和外部都對x y的集合進行遍歷的話.對於單向邊來說的話,求出來的結果是最大匹配.但是對於雙向邊來說...
poj 3041 Asteroids 最大匹配
把每一列當成乙個點,每一行當成乙個點,若行節點和列節點之間有邊,則表明該行列該列有乙個障礙物。可以放炸彈炸掉成行或者成列的障礙物!主要是構圖 將每一行當成乙個點,構成集合1,每一列也當成乙個點,構成集合2 每乙個障礙物的位置座標將集合1與集合2中的點連線起來,也就是將每乙個障礙物作為連線節點的邊。這...
POJ 1032 最大乘積
問題描述 乙個正整數一般可以分為幾個互不相同的自然數的和,如3 1 2,4 1 3,5 1 4 2 3,6 1 5 2 4,現在你的任務是將指定的正整數n分解成若干個互不相同的自然數的和,且使這些自然數的乘積最大。輸入格式 只乙個正整數n。輸出格式 是最大的乘積。輸入樣例 輸出樣例 30 資料範圍 ...