[全局最小割][Stoer-Wagner 算法] 无向图最小割
带有图片例子的 [BLOG]
复杂度是$(n ^ 3)$
HDU3691
// #pragma GCC optimize(2)
// #pragma GCC optimize(3)
// #pragma GCC optimize(4)
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <list>
#include <map>
#include <set>
#include <cassert>
//#include <unordered_set>
//#include <unordered_map>
// #include<bits/extc++.h>
// using namespace __gnu_pbds;
using namespace std;
#define pb push_back
#define fi first
#define se second
#define debug(x) cerr<<#x << " := " << x << endl;
#define bug cerr<<"-----------------------"<<endl;
#define FOR(a, b, c) for(int a = b; a <= c; ++ a) typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll; const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9+; template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} /**********showtime************/
const int maxn = ;
int mp[maxn][maxn], dis[maxn];
int vis[maxn], bin[maxn];
int n;
int concate(int &s, int &t) {
memset(dis, , sizeof(dis));
memset(vis, , sizeof(vis)); int k, maxc, mincut = ;
for(int i=; i<=n; i++) {
k = -, maxc = -;
for(int j=; j<=n; j++) {
if(bin[j] == && vis[j] == && dis[j] > maxc) {
k = j;
maxc = dis[j];
}
}
if(k == -) return mincut;
s = t; t = k;
mincut = maxc;
vis[k] = ;
for(int j=; j<=n; j++) {
if(vis[j] == && bin[j] == ) {
dis[j] = dis[j] + mp[k][j];
}
}
}
return mincut;
} int sw() {
int mincut = inf, s, t;
for(int i=; i<n; i++) {
int ans = concate(s, t);
mincut = min(mincut, ans);
bin[t] = ;
if(mincut == ) return mincut;
for(int j=; j<=n; j++) {
if(bin[j] == ) {
mp[s][j] = mp[s][j] + mp[t][j];
mp[j][s] = mp[s][j];
}
}
}
return mincut;
}
int main(){
int m,s;
while(~scanf("%d%d%d", &n, &m, &s) && n + m + s) {
for(int i=; i<=n; i++) {
bin[i] = ;
for(int j=; j<=n; j++) {
mp[i][j] = ;
}
}
for(int i=; i<=m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
mp[u][v] = mp[u][v] + w;
mp[v][u] = mp[u][v];
}
printf("%d\n", sw());
} return ;
} HDU
[全局最小割][Stoer-Wagner 算法] 无向图最小割的更多相关文章
- POJ 2914 Minimum Cut Stoer Wagner 算法 无向图最小割
POJ 2914 题意:给定一个无向图 小于500节点,和边的权值,求最小的代价将图拆为两个联通分量. Stoer Wagner算法: (1)用类似prim算法的方法求"最大生成树" ...
- 求全局最小割(SW算法)
hdu3002 King of Destruction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- 无向图最小割Stoer-Wagner算法学习
无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集,最小割集当然就权和最小的割集. 使用最小切割最大流定理: 1.min=MAXINT,确定一个源点 2.枚举汇点 3.计算最大流,并 ...
- sw算法求最小割学习
http:// blog.sina.com.cn/s/blog_700906660100v7vb.html 转载:http://www.cnblogs.com/ylfdrib/archive/201 ...
- 最小割树(Gomory-Hu Tree)求无向图最小割详解 附 BZOJ2229,BZOJ4519题解
最小割树(Gomory-Hu Tree) 前置知识 Gomory-Hu Tree是用来解决无向图最小割的问题的,所以我们需要了解无向图最小割的定义 和有向图类似,无向图上两点(x,y)的割定义为一个边 ...
- 算法提高 最小方差生成树(Kruskal)_模板
算法提高 最小方差生成树 时间限制:1.0s 内存限制:256.0MB 问题描述 给定带权无向图,求出一颗方差最小的生成树. 输入格式 输入多组测试数据.第一行为N,M,依次是 ...
- HDU 6311 Cover (无向图最小路径覆盖)
HDU 6311 Cover (无向图最小路径覆盖) Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- 最小树形图——朱刘算法(Edmonds)
定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入 ...
- hdu1533 Going Home km算法解决最小权完美匹配
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
随机推荐
- C基础知识(7):字符串
在C语言中,字符串实际上是使用null字符'\0' 终止的一维字符数组.因此,一个以null结尾的字符串,包含了组成字符串的字符. C编译器会在初始化数组时,自动把'\0'放在字符串的末尾.所以不需要 ...
- Control的Invoke和BeginInvoke
转载:https://www.cnblogs.com/c2303191/articles/826571.html 近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资 ...
- Django路由系统-URL命名&URL反向解析
命名URL和URL反向解析 前言 起始样式,HTML中的href是写死的,不能更改,如下示例代码: # urls中 urlpatterns = [ url(r'^admin/', admin.site ...
- 史上最简单的CentOS7破解密码方法,有图有真相
#############破解CentOS7密码详细过程 一.开机重启,按任意键停住,有时没停住,是鼠标键未在服务器中,点一下就好 二.按e键进入单用户模式 三.在UTF-8后面加上i ...
- redis缓存服务器
1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.使用redis的好处? 速度快,因为数据存在内存,类似hashmap,hashmap的优势就是查找和操作的时间 ...
- max-http-header-size 引发的一起血案(附:查gc方法)
最近在做项目的时候发现其中一个服务出现了性能上的问题,项目启动后,出现内存溢出异常. 查看堆内存使用情况 分析然后找到占用空间的类,当时是byte[]占用99%的空间,然后点开查看实例发现是http占 ...
- 【0.3】mysql复制的日常管理维护,mysql复制常见问题处理
[1]复制的日常管理 #复制的日常管理与维护 [1.1]show slave status\G :在从库查看从库线程状态 [1.2]flush tables with read lock; :主从不 ...
- WijmoJS 以声明方式添加 Vue 菜单项
WijmoJS 以声明方式添加 Vue 菜单项 在V2019.0 Update2 的全新版本中,Vue框架下 WijmoJS 的前端UI组件功能得到再度增强. 如今,向wj菜单组件添加项的方法将不限于 ...
- DOS sqlcmd
C:\>sqlcmd -? Microsoft (R) SQL Server 命令行工具版本 12.0.2000.8 NT版权所有 (c) 2014 Microsoft.保留所有权利. 用法: ...
- oracle数据段详解
Tablespace(表空间):表空间是数据库的逻辑划分,一个表空间只能属于一个数据库.所有的数据库对象都放在指定的表空间中,但主要存放的对象是表,所以称为表空间. 默认的系统表空间:system.s ...