poj 1466(最大獨力集)

2022-04-04 16:28:25 字數 964 閱讀 6547

證明:

最大獨立數=未匹配的節點+匹配數/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 資料範圍 ...