POJ 2914 Minimum Cut Stoer Wagner 算法 无向图最小割
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 算法 无向图最小割的更多相关文章
- POJ 2914 - Minimum Cut - [stoer-wagner算法讲解/模板]
首先是当年stoer和wagner两位大佬发表的关于这个算法的论文:A Simple Min-Cut Algorithm 直接上算法部分: 分割线 begin 在这整篇论文中,我们假设一个普通无向图G ...
- POJ 2914 Minimum Cut 最小割算法题解
最标准的最小割算法应用题目. 核心思想就是缩边:先缩小最大的边.然后缩小次大的边.依此缩小 基础算法:Prime最小生成树算法 只是本题測试的数据好像怪怪的,相同的算法时间执行会区别非常大,并且一样的 ...
- POJ 2914 Minimum Cut【最小割 Stoer-Wangner】
题意:求全局最小割 不能用网络流求最小割,枚举举汇点要O(n),最短增广路最大流算法求最大流是O(n2m)复杂度,在复杂网络中O(m)=O(n2),算法总复杂度就是O(n5):就算你用其他求最大流的算 ...
- POJ 2914 Minimum Cut 最小割图论
Description Given an undirected graph, in which two vertices can be connected by multiple edges, wha ...
- POJ 2914 Minimum Cut
Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 9319 Accepted: 3910 Case ...
- POJ 2914 Minimum Cut (全局最小割)
[题目链接] http://poj.org/problem?id=2914 [题目大意] 求出一个最小边割集,使得图不连通 [题解] 利用stoerwagner算法直接求出全局最小割,即答案. [代码 ...
- POJ 2914 Minimum Cut 全局最小割
裸的全局最小割了吧 有重边,用邻接矩阵的时候要小心 #include<iostream> #include<cstdio> #include<bitset> #in ...
- [全局最小割][Stoer-Wagner 算法] 无向图最小割
带有图片例子的 [BLOG] 复杂度是$(n ^ 3)$ HDU3691 // #pragma GCC optimize(2) // #pragma GCC optimize(3) // #pragm ...
- 最小割树(Gomory-Hu Tree)求无向图最小割详解 附 BZOJ2229,BZOJ4519题解
最小割树(Gomory-Hu Tree) 前置知识 Gomory-Hu Tree是用来解决无向图最小割的问题的,所以我们需要了解无向图最小割的定义 和有向图类似,无向图上两点(x,y)的割定义为一个边 ...
随机推荐
- 分页。php 引用代码
<?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private $lis ...
- Excel每隔10行取得一个数字
index(a:a,row(a1)*10) 然后下拉 将一列数字分为好多列 =OFFSET($B$1,(ROW(A1)-1)*11+COLUMN(A1)-1,,) row()返回当前的行,比如A则返回 ...
- 2)Javascript设计模式:Singleton模式
Singleton模式 var User = (function() { var instance; function _User(){} _User.prototype.say = function ...
- 获取IIS版本
近日,有一项目要分别获取iis6.0和7.5,然后对进程进行操作~ 研究良久,有以下办法获取iis版本. 代码: DirectoryEntry getEntity = new DirectoryEnt ...
- AtCoder Beginner Contest 052 ABCD题
A - Two Rectangles Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement The ...
- Java Spring MVC项目搭建(一)——Spring MVC框架集成
1.Java JDK及Tomcat安装 我这里安装的是JDK 1.8 及 Tomcat 8,安装步骤详见:http://www.cnblogs.com/eczhou/p/6285248.html 2. ...
- Linux 线程调度与优先级设置
转载:http://blog.csdn.net/a_ran/article/details/43759729 线程调度间的上下文切换 什么是上下文切换? 如果主线程是唯一的线程,那么他基本上不会被调度 ...
- NodeMCU之旅(四):实现Web配置页面
引言 利用Web页面做配置可以轻松适应用户的多种设备,如Android, IOS等.本文将介绍如何在NodeMCU中实现配置页面. 接线图请参考NodeMCU之旅(三):响应配置按钮. 配置页面后端 ...
- bzoj3991 [Sdoi2015]寻宝游戏 set动态维护虚树+树链求并
题目大意:支持多次操作,增加或删除一个关键点 动态维护虚树边权和*2 分析:可以用树链求并的方法,最后减去虚树的根到1距离 注意到树链求并是所有点到根距离-所有dfn序相邻两点的LCA到根距离 找df ...
- HTML5+MUI+HBuilder 之初探情人
07,08年那会儿正当Java火爆,C/C++仍是广泛运用的一门语言的时候,所以 我的大学都献给了C/C++和Java.当诺基亚的倒闭成为按键机时代衰落的标志时,移动APP的开发也如破堤之洪,爆炸式的 ...