POJ 2914 题意:给定一个无向图 小于500节点,和边的权值,求最小的代价将图拆为两个联通分量。

Stoer Wagner算法:

(1)用类似prim算法的方法求“最大生成树”,但是它比较的权值为w(A,x)A为所有在树上的点,x不在树上。

(2)剩下最后一个节点等待加入树的时候,用W(A,xn)更新ans ,并且将最后一个节点和倒数第二个节点合并。

(3)运行N-1次“最大生成树”,就得到了答案

补充几点:(1)像这种数据规模比较小的题目,没必要用优先队列或者堆优化,反而会超时。。

(2)这道题用流输入输出会超时。。。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long int LL;
const int maxn=,maxm=maxn*maxn/;
int w[maxn][maxn],dist[maxn],m,n,point[maxn];
bool intree[maxn];
int po(int x)
{
if(x==point[x])return x;
else return point[x]=po(point[x]);
}
void combine(int a,int b)
{
a=po(a);b=po(b);
bool counted[maxn];memset(counted,,sizeof(counted));
for(int i=;i<n;i++)
{
int np=po(i);
if((np==a)||(np==b)||(counted[np]))continue;
counted[np]=true;
w[np][a]+=w[np][b];w[a][np]+=w[b][np];
}
point[b]=a;
}
int main()
{
ios::sync_with_stdio(false);
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(w,,sizeof(w));
int a,b,c;
for(int i=;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
w[a][b]+=c;w[b][a]+=c;
}
for(int i=;i<n;i++)
point[i]=i;
int ans=1e+;
for(int ii=;ii<n;ii++)
{
if(ans==)break;
memset(dist,,sizeof(dist));memset(intree,,sizeof(intree));
int pre=po(),sum=;
intree[pre]=true;
while(sum<=(n-ii))
{
int maxk=-;
bool counted[maxn];memset(counted,,sizeof(counted));
for(int i=;i<n;i++)
{
int np=po(i);
if((intree[np])||(counted[np]))continue;
counted[np]=true;
dist[np]+=w[pre][np];
if((maxk==-)||(dist[np]>dist[maxk]))
{
maxk=np;
}
}
if(maxk==-){ans=;break;}
intree[maxk]=true;
if(sum==(n-ii))
{
combine(pre,maxk);
ans=min(ans,dist[maxk]);
}
pre=maxk;
sum++;
}
}
printf("%d\n",ans);
}
return ;
}

POJ 2914 Minimum Cut Stoer Wagner 算法 无向图最小割的更多相关文章

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

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

  2. POJ 2914 Minimum Cut 最小割算法题解

    最标准的最小割算法应用题目. 核心思想就是缩边:先缩小最大的边.然后缩小次大的边.依此缩小 基础算法:Prime最小生成树算法 只是本题測试的数据好像怪怪的,相同的算法时间执行会区别非常大,并且一样的 ...

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

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

  4. POJ 2914 Minimum Cut 最小割图论

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

  5. POJ 2914 Minimum Cut

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

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

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

  7. POJ 2914 Minimum Cut 全局最小割

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

  8. [全局最小割][Stoer-Wagner 算法] 无向图最小割

    带有图片例子的 [BLOG] 复杂度是$(n ^ 3)$ HDU3691 // #pragma GCC optimize(2) // #pragma GCC optimize(3) // #pragm ...

  9. 最小割树(Gomory-Hu Tree)求无向图最小割详解 附 BZOJ2229,BZOJ4519题解

    最小割树(Gomory-Hu Tree) 前置知识 Gomory-Hu Tree是用来解决无向图最小割的问题的,所以我们需要了解无向图最小割的定义 和有向图类似,无向图上两点(x,y)的割定义为一个边 ...

随机推荐

  1. 74HC166与TPIC6A595分析(转)

    源:Atmega162串行外设接口SPI 一.Atmega162的SPI接口基本概念与工作原理 SPI接口的全称是"Serial Peripheral Interface",意为串 ...

  2. <libxml2/tree.h> file not found

    Build Settings: head search paths :$(inherited) /usr/include/libxml2 Build phases: 加上libxml2.tbd

  3. [Angular Tutorial] 4 - Directory and File Organization

    在这一步中,我们将不会在我们的应用中添加任何新功能,相反,我们打算退回一步,重构我们的代码库,移动我们的代码和文件,以此来使我们的应用更具易扩展性和可维护性. 在先前的步骤中,我们已经见识到了如何将我 ...

  4. div垂直居中(js)

    window.onload = function(){ var xx = document.documentElement.clientHeight; // 470为要垂直居中的div的高度 he = ...

  5. IM 之 融云

    官方网站:http://www.rongcloud.cn 官方开发文档:http://www.rongcloud.cn/docs/ IM 融云 之 开发基础概念 IM 融云 之 通讯能力库API IM ...

  6. idea 15破解方法记录

    So easy! Only one step.     注册时选择 License server ,填 http://idea.lanyus.com  对于Clion等同样适用.

  7. 1.4.2.3. SETUP(Core Data 应用程序实践指南)

    初始化Core Data的三个方法: init,初始化托管对象模型.持久化存储协调器.托管对象上下文 - (id)init { ) { NSLog(@"Running %@ '%@'&quo ...

  8. 国民身份证号码校验之“C#/Winform方法实现+案例分析”

    根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出 ...

  9. 封装 INI 文件读写函数

    delphi读写ini文件实例 //--两个过程,主要实现:窗体关闭的时候,文件保存界面信息:窗体创建的时候,程序读取文件文件保存的信息. //--首先要uses IniFiles(单元) //--窗 ...

  10. Raphael的text及对齐方式

    Raphael的text及对齐方式 <%@ page language="java" contentType="text/html; charset=UTF-8&q ...