Stoer-Wagner算法基本思想:如果能求出图中某两个顶点之间的最小割,更新答案后合并这两个顶点继续求最小割,到最后就得到答案。

算法步骤:

-------------------------------------------------------------------------------------------------------------------------

(1)首先初始化,设最小割ans = INF                                                                                                                       |

(2)任选一个顶点u加入集合S,定义W(S,p)为S中的所有点到S外一点p的权值总和                                                            |

(3)根据选定的u更新W(S,p)的值                                                                                                                            |

(4)选出W(S,p)中值最大的点作为新的S,若S=G(V),则继续步骤(3)                                                                          |

(5)最后进入S的两点s,t,用W(S,t)更新ans的值                                                                                                        |

(6)新建顶点c,边权w(c,v) = w(s,v)+w(t,v),删除顶点s,t及其相连的边                                                                         |

(7)若|V| > 1,则继续步骤(2)                                                                                                                            |

-------------------------------------------------------------------------------------------------------------------------

步骤(2)-(5)就是找出两个顶点,并求出它们的最小割W(S,t),步骤(6)是删除这两个顶点,重复操作,直至顶点数变为1

复杂度:O(n^3)

例题: POJ 2914 Minimum Cut

裸的最小割

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define Mod 1000000007
using namespace std;
#define N 506 int dis[N],node[N];
int ans;
int mp[N][N];
int vis[N]; int Sto_Wag(int n)
{
int maxi,pre,m;
int i,j;
for(i=;i<=n;i++)
node[i] = i;
while(n > )
{
m = -,maxi = ;
for(i=;i<=n;i++)
{
dis[node[i]] = mp[node[]][node[i]];
vis[node[i]] = ;
if(dis[node[i]] > m)
{
m = dis[node[i]];
maxi = i;
}
}
pre = ;
vis[node[]] = ;
for(j=;j<=n;j++)
{
vis[node[maxi]] = ;
if(j == n)
{
ans = min(ans,m);
for(i=;i<=n;i++)
{
mp[node[pre]][node[i]] += mp[node[maxi]][node[i]];
mp[node[i]][node[pre]] += mp[node[maxi]][node[i]];
}
node[maxi] = node[n--];
}
else
{
pre = maxi;
m = -;
for(i=;i<=n;i++)
{
if(!vis[node[i]])
{
dis[node[i]] += mp[node[pre]][node[i]];
if(dis[node[i]] > m)
{
m = dis[node[i]];
maxi = i;
}
}
}
}
}
}
return ;
} int main()
{
int n,m,u,v,w;
while(scanf("%d%d",&n,&m)!=EOF)
{
ans = Mod;
memset(mp,,sizeof(mp));
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
u++,v++;
mp[u][v] += w;
mp[v][u] += w;
}
Sto_Wag(n);
printf("%d\n",ans);
}
return ;
}

图的全局最小割的Stoer-Wagner算法及例题的更多相关文章

  1. ZOJ 2753 Min Cut (Destroy Trade Net)(无向图全局最小割)

    题目大意 给一个无向图,包含 N 个点和 M 条边,问最少删掉多少条边使得图分为不连通的两个部分,图中有重边 数据范围:2<=N<=500, 0<=M<=N*(N-1)/2 做 ...

  2. 全局最小割StoerWagner算法详解

    前言 StoerWagner算法是一个找出无向图全局最小割的算法,本文需要读者有一定的图论基础. 本文大部分内容与词汇来自参考文献(英文,需***),用兴趣的可以去读一下文献. 概念 无向图的割:有无 ...

  3. poj 2914(stoer_wanger算法求全局最小割)

    题目链接:http://poj.org/problem?id=2914 思路:算法基于这样一个定理:对于任意s, t   V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Cont ...

  4. POJ 2914 Minimum Cut Stoer Wagner 算法 无向图最小割

    POJ 2914 题意:给定一个无向图 小于500节点,和边的权值,求最小的代价将图拆为两个联通分量. Stoer Wagner算法: (1)用类似prim算法的方法求"最大生成树" ...

  5. 全局最小割Stoer-Wagner算法

    借鉴:http://blog.kongfy.com/2015/02/kargermincut/ 提到无向图的最小割问题,首先想到的就是Ford-Fulkerson算法解s-t最小割,通过Edmonds ...

  6. HDU 6081 度度熊的王国战略(全局最小割Stoer-Wagner算法)

    Problem Description 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更 ...

  7. 求全局最小割(SW算法)

    hdu3002 King of Destruction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  8. POJ 2914 Minimum Cut (全局最小割)

    [题目链接] http://poj.org/problem?id=2914 [题目大意] 求出一个最小边割集,使得图不连通 [题解] 利用stoerwagner算法直接求出全局最小割,即答案. [代码 ...

  9. HDU 3691 Nubulsa Expo(全局最小割Stoer-Wagner算法)

    Problem Description You may not hear about Nubulsa, an island country on the Pacific Ocean. Nubulsa ...

随机推荐

  1. Ratatype - 在线打字教程,提高打字速度

    Ratatype 是一个在线的打字教程网站,帮助人们提高键盘输入速度.开始掌握你的技能,挑战你的朋友或得到一个打字的证书.如果打字慢会浪费你宝贵的时间.如果你的打字速度提高30%,您可以每天节省20分 ...

  2. div水平居中

    1.先给它外层的div定位并left:position:absolute;left:50%; 2.获取当前元素div的宽度,并除以2 3.改变它的css:margin-left:-(获取当前元素div ...

  3. CSS代码记录

    1. 内容横向滚动的代码 .ul { display: box; display: -webkit-box; width: 250px; background: yellow; overflow-y: ...

  4. pgRouting 2.0 for windows 来了

    Postgres 9.2, PostGIS 2.0 and pgRouting 2.0  支持32.64 下载地址: http://winnie.postgis.net/download/window ...

  5. 配置redis外网可访问,并只允许指定的ip可访问redis

    开启redis 允许外网IP 访问 在 Linux 中安装了redis 服务,当在客户端通过远程连接的方式连接时,报could not connect错误. 错误的原因很简单,就是没有连接上redis ...

  6. ios UI 适配布局相关文章

    1. http://lvwenhan.com/ios/430.html 2 . http://blog.csdn.net/liangliang103377/article/details/400822 ...

  7. Ubuntu 安装Samba服务器

    1.安装 sudo apt-get update sudo apt-get install samba (如果出现库依赖问题可用命令sudo apt-get install samba libwbcl ...

  8. OC 初识NSString,self关键字,继承,成员变量的可见性,description方法

    OC 初识NSString,self关键字,继承,成员变量的可见性,description方法 初识 NSString: char * string = "旭宝爱吃鱼"; 常量字符 ...

  9. C# sql语句拼接时 like情况的防sql注入的用法

    今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...

  10. 基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送

    前言 写了一个简单的JMS例子,之所以使用JNDI 是出于通用性考虑,该例子使用JMS规范提供的通用接口,没有使用具体JMS提供者的接口,这样可以保证我们编写的程序适用于任何一种JMS实现(Activ ...