POJ PKU 2914 无向图最小割 StoerWagner
(2010-08-02 15:48:06)
标签:
pojpku2914最小割stoerwagnerit |
分类: 网络流 |
题目描述:
给你无向图的信息(点和边的容量),求最小割。
解题报告:
朴素的最大流算法,由于源点和汇点是要固定的,所以固定了源点后,要枚举汇点
所以复杂度是O(n^4)以上。
而利StoerWagner用类似prim的算法(最大生成树)。
复杂度O(n^3), 如果加了堆优化,复杂度O(n^2logn)。
算法过程如下:
1.
设最小割cut=INF, 任选一个点s到集合A中, 定义W(A, p)为A中的所有点到A外一点p的权总和.
2. 对刚才选定的s, 更新W(A,p)(该值递增).
3. 选出A外一点p, 且W(A,p)最大的作为新的s, 若A!=G(V), 则继续2.
4. 把最后进入A的两点记为s和t, 用W(A,t)更新cut.
5. 新建顶点u, 边权w(u, v)=w(s, v)+w(t, v), 删除顶点s和t, 以及与它们相连的边.
6. 若|V|!=1则继续1.
代码如下:
#include<iostream>using namespace std;
#define size 600
int n, m, g[size][size];
int A[size], w[size], vst[size];
int StoerWagner(int n)
{