題解:全域性最小割stoer-wagner演算法
附上**:
關於證明:
**的證明寫得非常詳細,在此不再贅述
關於時間複雜度
最大鄰接搜尋是來求任意非固定兩點的最小割,做完一次最大鄰接搜尋之後還要縮點重做,直到全圖只剩乙個點
所以使用堆優化的複雜度大概是o(n^2logn)
關於實現
初寫stoer-wagner的時候會覺得比較麻煩,在此提供乙個簡單易懂的o(n^3)寫法:
#include#include#includeusing namespace std;
#define n 605
const int inf=0x3f3f3f3f;
int cap[n][n];
int dis[n];bool vis[n],del[n];
int main()
int ans=inf;
for(i=1;idis[pos]||!pos))
pos=k;
vis[pos]=1;
for(k=1;k<=n;k++)
if(!del[k]&&!vis[k])
dis[k]+=cap[pos][k];
} ans=min(dis[pos],ans);
del[pre]=1;
for(j=1;j<=n;j++)
} printf("%d",ans);
}
全域性最小割Stoer Wagner演算法
借鑑 提到無向圖的最小割問題,首先想到的就是ford fulkerson演算法解s t最小割,通過edmonds karp實現可以在o nm2 時間內解決這個問題 n 為圖中的頂點數,m 為圖中的邊數 但是全域性最小割和s t最小割不同,並沒有給定的指定的源點s和匯點t,如果通過ford fulke...
最小割(Stoer Wagner演算法)
簡介 割 在乙個圖g v,e 中v是點集,e是邊集。在e中去掉乙個邊集c使得g v,e c 不連通,c就是圖g v,e 的乙個割 最小割 在g v,e 的所有割中,邊權總和最小的割就是最小割。例題 minimum cut 描述 n個頂點。下面是m行,a,b,c,這意味著有c個邊連線頂點a和b。inc...
Stoer Wagner演算法(最小割集)
演算法步驟 設最小割cut inf,任選乙個點s到集合a中,定義w a,p 為a中的所有點到a外一點p的權總和.對剛才選定的s,更新w a,p 該值遞增 選出a外一點p,且w a,p 最大的作為新的s,若a g v 則繼續2.把最後進入a的兩點記為s和t,用w a,t 更新cut.合併st,即新建頂...