题目链接:http://poj.org/problem?id=2914

思路:算法基于这样一个定理:对于任意s, t   V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Contract(s, t)操作所得的图的全局最小割。 算法框架:

1. 设当前找到的最小割MinCut 为+∞ 。
2. 在 G中求出任意 s-t 最小割 c,MinCut = min(MinCut, c)   。
3. 对 G作 Contract(s, t)操作,得到 G'=(V', E'),若|V'| > 1,则G=G'并转 2,否则MinCut 为原图的全局最小割。

Contract 操作定义: 
若不存在边(p, q),则定义边(p, q)权值w(p, q) = 0 
Contract(a, b): 删掉点 a, b 及边(a, b),加入新节点 c,对于任意 v V ∈ ,w(v, c) = w(c, v) = w(a, v) + w(b, v).

求 G=(V, E)中任意 s-t 最小割的算法: 
定义w(A, x) = ∑w(v[i], x),v[i] ∈ A  
定义 Ax 为在x 前加入 A 的所有点的集合(不包括 x) 
1. 令集合 A={a},a为 V中任意点 
2. 选取 V - A中的 w(A, x)最大的点 x加入集合 A 
3. 若|A|=|V|,结束

令倒数第二个加入 A的点为 s,最后一个加入 A的点为 t,则s-t 最小割为 w(At, t)。

贴下大牛的模版:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 #define MAXN 555
 7 #define inf 1<<30
 8
 9 int v[MAXN],dist[MAXN];
10 int map[MAXN][MAXN];
11 bool vis[MAXN];
12 int n,m;
13
14 //求全局最小割的Stoer_Wanger算法
15 int Stoer_Wanger(int n)
16 {
17     int res=inf;
18     for(int i=0;i<n;i++)v[i]=i;
19     while(n>1){
20         int k=0,pre=0;//pre用来表示之前加入A集合的点,我们每次都以0点为第一个加入A集合的点
21         memset(vis,false,sizeof(vis));
22         memset(dist,0,sizeof(dist));
23         for(int i=1;i<n;i++){
24             k=-1;
25             for(int j=1;j<n;j++){
26                 if(!vis[v[j]]){
27                     dist[v[j]]+=map[v[pre]][v[j]];//dis数组用来表示该点与A集合中所有点之间的边的长度之和
28                     if(k==-1||dist[v[k]]<dist[v[j]]){
29                         k=j;
30                     }
31                 }
32             }
33             vis[v[k]]=true;
34             if(i==n-1){
35                 res=min(res,dist[v[k]]);
36                 //将该点合并到pre上,相应的边权就要合并
37                 for(int j=0;j<n;j++){
38                     map[v[pre]][v[j]]+=map[v[j]][v[k]];
39                     map[v[j]][v[pre]]+=map[v[j]][v[k]];
40                 }
41                 v[k]=v[--n];//删除最后一个点
42             }
43             pre=k;
44         }
45     }
46     return res;
47 }
48
49 int main()
50 {
51     int u,v,w;
52     while(~scanf("%d%d",&n,&m)){
53         memset(map,0,sizeof(map));
54         while(m--){
55             scanf("%d%d%d",&u,&v,&w);
56             map[u][v]+=w;
57             map[v][u]+=w;
58         }
59         int ans=Stoer_Wanger(n);
60         printf("%d\n",ans);
61     }
62     return 0;
63 }

View Code

转载于:https://www.cnblogs.com/wally/p/3281983.html

poj 2914(stoer_wanger算法求全局最小割)相关推荐

  1. 【HDU - 6081】度度熊的王国战略(SW算法,全局最小割)

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

  2. POJ - 2914 Minimum Cut(全局最小割-Stoer_Wagner)

    题目链接:点击查看 题目大意:给出一张无向图,要求将其分为两个集合,使得最小割最小 题目分析:算法学习自:https://blog.csdn.net/dingdi3021/article/detail ...

  3. Stoer-Wagner无向图全局最小割(hduoj 3691 Nubulsa Expo)

    题意: 一张n个点m条边的无向图,每个点都有一个最大流量,给定起点S,问如何选取终点T,使得最大流最大 翻译一下: 一张n个点m条边的无向联通图,你要割掉一些边使整张图不连通,但是割掉每条边都需要一定 ...

  4. 【HDU - 3002】King of Destruction(无向图全局最小割,SW算法,模板题)

    题干: Zhou xingxing is the successor of one style of kung fu called "Karate Kid".he is falli ...

  5. POJ 3469 Dual Core CPU(最小割模型的建立)

    分析: 这类问题的一遍描述,把一些对象分成两组,划分有一些代价,问最小代价.一般性的思路是, 把这两组看成是S点和T点,把划分的代价和割边的容量对应起来求最小割. 把S和可模版tem之间到达关系看作是 ...

  6. BZOJ 1266: [AHOI2006]上学路线route Floyd算法,网络最小割

    Description 可可和卡卡家住合肥市的东郊,每天上学他们都要转车多次才能到达市区西端的学校.直到有一天他们两人参加了学校的信息学奥林匹克竞赛小组才发现每天上学的乘车路线不一定是最优的. 可可: ...

  7. 全局最小割(Stoer-Wagner)

    P5632 [模板]Stoer-Wagner算法 板子收集中 #include <bits/stdc++.h> #define inf 0x7fffffff #define ll long ...

  8. 【学习笔记】无向图最小割

    零.概述 什么离谱的人会研究这种离谱的东西啊--从定义,到构造,到性质,我完全想象不到 idea\rm ideaidea 的来源-- 研究带权无向图上,任意两点之间的最小割.最朴素的方法是做 O(n2 ...

  9. 【hdu 4859】海岸线(图论--网络流最小割)

    题意:有一个区域,有'.'的陆地,'D'的深海域,'E'的浅海域.其中浅海域可以填充为陆地.这里的陆地区域不联通,并且整个地图都处在海洋之中.问填充一定浅海域之后所有岛屿的最长的海岸线之和. 解法:最 ...

最新文章

  1. 编程基础 垃圾回收_为什么我回收编程问题
  2. pythonl学习笔记——爬虫的基本常识
  3. PIC模拟从入门到熟练系列之组会PPT20210913《Note of PIC》
  4. noip2012-day2-t2
  5. 分布式事务控制解决方案
  6. 常用的HTML5和CSS3标签及用法(入门篇)
  7. 桶排序/基数排序(Radix Sort)
  8. 怎样使用css动画animation实现静态箭头图片上下摆动
  9. [源码和报告分享]基于C++实现的运动会统分系统
  10. 70个城市房价上涨,令人忐忑
  11. 如何制作ISO镜像文件
  12. 编码器高速脉冲计数器Modbus RTU模块IBF150
  13. 课后练习--制作美联英语在线VIP页面——学伴
  14. nginx报错找不到指定路径
  15. 【声纹识别】 EER
  16. Linux关于ssh: connect to host xxx.xxx.xxx.xxx port 22: Operation timed out问题
  17. Windows 找不到网络 计算机或设备,“win7系统宽带拨号提示找不到设备”的解决方案...
  18. QQ 不也有语音功能吗,为什么微信会有市场?
  19. nc/netcat命令
  20. 图灵深度学习工作站介绍

热门文章

  1. DM6467T开发板领航——dmai经验谈
  2. ios 开发框架原始雏形 01
  3. 如何去除Windows8测试版界面“水印”
  4. Oracle左右链接
  5. Linux有待完善的小缺陷的累记
  6. extjs 表单验证实例
  7. spring bean属性scope
  8. android 获取apk中的素材图片
  9. android 走马灯效果
  10. Eclipse android