图的全局最小割的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 ...
随机推荐
- CSS3 模块
CSS3 被划分为模块. 其中最重要的 CSS3 模块包括: 选择器 框模型 背景和边框 文本效果 2D/3D 转换 动画 多列布局 用户界面
- Wix安装程序中判断是否安装的.net framwork 4.5
<PropertyRef Id="NETFRAMEWORK40FULL"/> <PropertyRef Id="NETFRAMEWORK45" ...
- 数据持久化之NSKeyedArchiver
基本的数据类型如NSString.NSDictionary.NSArray.NSData.NSNumber等可以用属性列表的方法持久化到.plist 文件中,但如果是一些自定义的类的话,属性列表的方法 ...
- Java---Condition控制线程通信
java中控制线程通信的方法有:1.传统的方式:利用synchronized关键字来保证同步,结合wait(),notify(),notifyAll()控制线程通信.不灵活. 2.利用Conditio ...
- 操作系统开发系列—13.e.三进程
我们再来添加一个任务,首先添加一个进程体: void TestC() { int i = 0x2000; while(1){ disp_str("C"); disp_int(i++ ...
- DropDownList 添加一个"请选择"或"全部"之类的项
DropDownList在从数据库中得到数据源绑定后,添加一个"请选择"或"全部"之类的项 1:直接添加:<asp:ListItem Value=&quo ...
- 巩固一下:SpringMVC详细示例实战教程
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...
- XListView
第一步:到官网下载第三方包,拷贝到自己的项目中 https://github.com/Maxwin-z/XListView-Android 第二步:xml文件 <me.maxwin.view.X ...
- objective-c系列-NSDictionary&NSMutableDictionary
********************************************* NSDictionary ***************************************** ...
- Protocol and Delegate协议和代理
1.什么是协议? OC协议仿照Java的接口.协议和接口,都是不同类的对象之间一种通信的机制.2.协议的基础语法 单纯的语言描述协议的语法,很难让人理解,主要因为在OC中协议是类对象的通信机制,他 ...