图的全局最小割的Stoer-Wagner算法及例题
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算法及例题的更多相关文章
- ZOJ 2753 Min Cut (Destroy Trade Net)(无向图全局最小割)
题目大意 给一个无向图,包含 N 个点和 M 条边,问最少删掉多少条边使得图分为不连通的两个部分,图中有重边 数据范围:2<=N<=500, 0<=M<=N*(N-1)/2 做 ...
- 全局最小割StoerWagner算法详解
前言 StoerWagner算法是一个找出无向图全局最小割的算法,本文需要读者有一定的图论基础. 本文大部分内容与词汇来自参考文献(英文,需***),用兴趣的可以去读一下文献. 概念 无向图的割:有无 ...
- poj 2914(stoer_wanger算法求全局最小割)
题目链接:http://poj.org/problem?id=2914 思路:算法基于这样一个定理:对于任意s, t V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Cont ...
- POJ 2914 Minimum Cut Stoer Wagner 算法 无向图最小割
POJ 2914 题意:给定一个无向图 小于500节点,和边的权值,求最小的代价将图拆为两个联通分量. Stoer Wagner算法: (1)用类似prim算法的方法求"最大生成树" ...
- 全局最小割Stoer-Wagner算法
借鉴:http://blog.kongfy.com/2015/02/kargermincut/ 提到无向图的最小割问题,首先想到的就是Ford-Fulkerson算法解s-t最小割,通过Edmonds ...
- HDU 6081 度度熊的王国战略(全局最小割Stoer-Wagner算法)
Problem Description 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更 ...
- 求全局最小割(SW算法)
hdu3002 King of Destruction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- POJ 2914 Minimum Cut (全局最小割)
[题目链接] http://poj.org/problem?id=2914 [题目大意] 求出一个最小边割集,使得图不连通 [题解] 利用stoerwagner算法直接求出全局最小割,即答案. [代码 ...
- HDU 3691 Nubulsa Expo(全局最小割Stoer-Wagner算法)
Problem Description You may not hear about Nubulsa, an island country on the Pacific Ocean. Nubulsa ...
随机推荐
- 【web前端面试题整理07】我不理解表现与数据分离。。。
拜师传说 今天老夫拜师了,老夫有幸认识一个JS高手,在此推荐其博客,悄悄告诉你,我拜他为师了,他承诺我只收我一个男弟子..... 师尊刚注册的账号,现在博客数量还不多,但是后面点会有干货哦,值得期待. ...
- javascript 奇淫巧技44招
1.首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. 2.使用===取代== ==和!=操作符会在需要的情况下自动转换数据类型.但 ...
- JavaScript强化教程 -- cocosjs场景切换
场景切换 在main.js,将StartScene作为我们初始化运行的场景,代码如下: cc.LoaderScene.preload(g_resources, function () { cc.dir ...
- SharePoint 2013 配置基于表单的身份认证
前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处w ...
- Shiro简介
1.简介 Apache Shiro是一个功能强大且易于使用的Java安全框架,进行身份验证,授权,加密和会话管理,可用于保护任何应用程序 - 从命令行应用程序,移动应用程序到大型的Web应用和企业应用 ...
- Sql Server 2008 数据库附加失败提示9004错误解决办法
附加数据库 对于 服务器“WSS_Content”失败. (Microsoft.SqlServer.Smo)执行 Transact-SQL 语句或批处理时发生了异常. (Microsoft.SqlS ...
- mysql不同版本和存储引擎选型的验证
Mysql的版本和存储引擎较多,为了选择最适合业务使用的系统,需要进行一定的验证,本文描述mysql的验证过程和思路. 主要涉及: Mysql的版本 v Mariadb v Tokudb v Orac ...
- picasso总结
public class UMDocApplication extends Application { private Picasso picasso = null; /**获取Picasso对象** ...
- 【C语言】C语言关键字
目录: [含义] [C语言中的关键字] [关键字分类] · 数据类型关键字 · 类型修饰符关键字 · 复杂类型关键字 · 存储级别关键字 · 流程控制关键字 ...
- iOS 单例传值遇见问题
单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...