无向图全局最小割算法

求 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)

即简单来说,就是每次从0点开始,进行一种类似于最大生成树的操作,唯一与最大生成树的区别就是在选择把哪个点加进来的时候,不是根据连到它的边的长度,而是根据它到树的所有边的长度和。然后记录最后两个进树的点合并(缩点),并用这两点间的割来更新最小值。然后不断重复此操作(生成树、缩点、最小值),直到所有点都缩为1点。

该题是模板题:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN=;
const int inf=;
int map[MAXN][MAXN];
int wan[MAXN],combine[MAXN],vis[MAXN];
int n,m;
int S,T,mincut; void scut(){
S=T=-;
int p,Max;
memset(wan,,sizeof(wan));
memset(vis,,sizeof(vis));
for(int i=;i<n;i++){
Max=-inf;
for(int j=;j<n;j++){
if(!combine[j]&&!vis[j]&&wan[j]>Max){
p=j; Max=wan[j];
}
}
if(p==T) return ;
S=T; T=p;
vis[T]=;
for(int j=;j<n;j++){
if(!combine[j]&&!vis[j]){
wan[j]+=map[T][j];
}
}
}
} void slove(){
memset(combine,,sizeof(combine));
mincut=inf;
for(int i=;i<n-;i++){
scut();
if(mincut>wan[T]) mincut=wan[T];
if(mincut==) return;
combine[T]=;
for(int j=;j<n;j++){
if(!combine[j]){
map[S][j]+=map[T][j];
map[j][S]+=map[j][T];
}
}
}
} int main(){
int u,v,w;
while(scanf("%d%d",&n,&m)!=EOF){
memset(map,,sizeof(map));
for(int i=;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
map[u][v]+=w;
map[v][u]+=w;
}
slove();
printf("%d\n",mincut);
}
return ;
}

POJ 2914的更多相关文章

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

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

  2. POJ 2914 - Minimum Cut - [stoer-wagner算法讲解/模板]

    首先是当年stoer和wagner两位大佬发表的关于这个算法的论文:A Simple Min-Cut Algorithm 直接上算法部分: 分割线 begin 在这整篇论文中,我们假设一个普通无向图G ...

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

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

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

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

  5. POJ 2914:Minimum Cut(全局最小割Stoer-Wagner算法)

    http://poj.org/problem?id=2914 题意:给出n个点m条边,可能有重边,问全局的最小割是多少. 思路:一开始以为用最大流算法跑一下,然后就超时了.后来学习了一下这个算法,是个 ...

  6. POJ 2914 Minimum Cut

    Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 9319   Accepted: 3910 Case ...

  7. POJ 2914 Minimum Cut 最小割图论

    Description Given an undirected graph, in which two vertices can be connected by multiple edges, wha ...

  8. POJ 2914 Minimum Cut【最小割 Stoer-Wangner】

    题意:求全局最小割 不能用网络流求最小割,枚举举汇点要O(n),最短增广路最大流算法求最大流是O(n2m)复杂度,在复杂网络中O(m)=O(n2),算法总复杂度就是O(n5):就算你用其他求最大流的算 ...

  9. POJ 2914 Minimum Cut 全局最小割

    裸的全局最小割了吧 有重边,用邻接矩阵的时候要小心 #include<iostream> #include<cstdio> #include<bitset> #in ...

随机推荐

  1. bzoj4004 [JLOI2015]装备购买——线性基+贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4004 今天讲课讲到的题,据说满足拟阵的性质,所以贪心是正确的: 总之就贪心,按价格从小到大排 ...

  2. (三)Appium-desktop 打包

    appium-desktop经过二次开发后,需要打包为应用提供给其它同学使用.我们知道appium-desktop是使用electron来构建跨平台桌面应用程序.electron有electron-p ...

  3. idea UML快捷键

  4. Oracle备份Scott

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  5. Java调用JavaWebService

    1.pom配置 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId&g ...

  6. C#Cookie操作类,删除Cookie,给Cookie赋值

    using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security ...

  7. 富文本wangEditor的批量激活

    最近项目中使用了wangEditor这个轻量级的富文本框,由于需求是一个页面中会有多个富文本框同时激活,所以写了个批量激活的jquery方法,分享一下 // 激活富文本框 var wangEditor ...

  8. Unity引擎GUI之Button

    UGUI Button,可以说是真正的使用最广泛.功能最全面.几乎涵盖任何模块无所不用无所不能的组件,掌握了它的灵巧使用,你就几乎掌握了大半个UGUI! 一.Button组件: Interactabl ...

  9. 常用SQL函数

    —————常用SQL函数(实例简述)————— 数据库环境:DB2数据库: 执行工具:Toad for  DB2 1.转字符串:to_char() 日期类型:to_char(birthday,'yyy ...

  10. AI:IPPR的数学表示-CNN结构/参数分析

    前言:CNN迎接多类的挑战 特定类型的传统PR方法特征提取的方法是固定的,模式函数的形式是固定的,在理论上产生了特定的"局限性" 的,分类准确度可以使用PAC学习理论的方法计算出来 ...