POJ2914
POJ2914
无向图的最小割
题意:给你一个无向图,然后去掉其中的n条边,使之形成两个连通分量,也即原无向图不连通,求n的最小值。
输入:
m(无向图点集),n(无向图边集)
a,b,c(a,b两点之间流量)
输出:
n最小值
按照算法与实现上的Stoer-Wagner算法求解,原理不愿细究,知道接口能用就行,可以优化,用优先队列能将
复杂度减少到(nm+(n^2)*logn)
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int max1=512;
int g[max1][max1];
int b[max1],dist[max1];
int n,m;
/*
struct stoer_wagner
{
int n,g[max][max],b[max],dist[max];
void init(int nn,int w[max][max])
{
int i,j;
n=nn;
for(int i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
g[i][j]=w[i][j];
}
}
*/ int min_cut_phase(int ph,int &x,int &y)
{
int i,j,t;
b[t=1]=ph;
for(i=1;i<=n;i++)
if(b[i]!=ph)
dist[i]=g[1][i];
for(i=1;i<n;i++)
{
x=t;
for(t=0,j=1;j<=n;j++)
if(b[j]!=ph&&(!t||dist[j]>dist[t]))
t=j;
b[t]=ph;
for(j=1;j<=n;j++)
if(b[j]!=ph)
dist[j]+=g[t][j];
}
return y=t,dist[t];
} void merge(int x,int y)
{
int i;
if(x>y) swap(x,y);
for(i=1;i<=n;++i)
if(i!=x&&i!=y)
g[i][x]+=g[i][y],g[x][i]+=g[y][i];
if(y==n)
return ;
for(i=1;i<n;++i) if(i!=y){
swap(g[i][y],g[i][n]);
swap(g[y][i],g[n][i]);
}
} void min_cut()
{
int ret=0x3fffffff,i,x,y;
memset(b,0,sizeof(b));
for(i=1;n>1;++i,n--){
ret=min(ret,min_cut_phase(i,x,y));
merge(x,y);
}
printf("%d\n",ret);
} int main()
{
while(scanf("%d%d",&n,&m)==2){
memset(g,0,sizeof(g));
while(m--){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
a++,b++;
g[a][b]+=c;
g[b][a]+=c;
}
min_cut();
}
return 0;
}
POJ2914的更多相关文章
- POJ2914 (未解决)无向图最小割|Stoer-Wagner算法|模板
还不是很懂,贴两篇学习的博客: http://www.hankcs.com/program/algorithm/poj-2914-minimum-cut.html http://blog.sina.c ...
- poj2914无向图的最小割模板
题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...
- poj2914 Minimum Cut 全局最小割模板题
Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 8324 Accepted: 3488 Case ...
- POJ2914 Minimum Cut —— 最小割
题目链接:http://poj.org/problem?id=2914 Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Sub ...
- poj2914无向图的最小割
http://blog.csdn.net/vsooda/article/details/7397449 //算法理论 http://www.cnblogs.com/ylfdrib/archive/20 ...
- POJ 2914 - Minimum Cut - [stoer-wagner算法讲解/模板]
首先是当年stoer和wagner两位大佬发表的关于这个算法的论文:A Simple Min-Cut Algorithm 直接上算法部分: 分割线 begin 在这整篇论文中,我们假设一个普通无向图G ...
- 图论:Stoer-Wagner算法
利用Stoer-Wagner算法求无向图最小割 直接给出算法描述和过程实现: 算法步骤: . 设最小割cut=INF, 任选一个点s到集合A中, 定义W(A, p)为A中的所有点到A外一点p的权总和. ...
随机推荐
- Android学习----打印日志Log
Log.v(tag,msg);所有内容 Log.d(tag,msg);debug Log.i(tag,msg);一般信息 Log.w(tag,msg);警告信息 Log.e(tag,msg);错误信息 ...
- 让 IE6/7/8 也支持HTML5标签的方式
方式一:引入Google的HTML5.js线上文件 <!–[if lt IE9]> <script src="http://html5shiv.googlecode.com ...
- $_CFG = load_config(); /* 载入系统参数 */
ecshop 中$_CFG数组主要是放置一些系统参数,并且全站共享的数据,在使用的时候,ecshop里面常常以$GLOBALS['_CFG']全局变量的模式来处理. ecshop 的$GLOBALS[ ...
- jQuery简单导航示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jquery easy ui 学习 (9)Pagination in TreeGrid 分页
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- C++学习笔记4——类的封装(2)
简介: 重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.其中一元运算符有一个参数,二元运算符有两个参数. 可以被重载的运算符 + - * / % ^ ...
- jQuery的live绑定事件在mobile safari(iphone / ipad / ipod)上失效的解决方案
jQuery的live绑定为什么会在mobile safari上失效呢?其实可以追溯到jQuery里live的实现方式.live的实现方式实际上是通过事件委托机制来实现的,也就是说是通过诸如冒泡的方式 ...
- 点击Textbox 给日历控件赋值
1.前台代码: <asp:TextBox ID="TextBox1" runat="server" onfocus="return show() ...
- 【HDOJ】3587 NUDOTA
字符串模拟水题. /* 3587 */ #include <iostream> #include <cstdio> #include <cstring> #incl ...
- -_-#【Canvas】圆弧运动
var canvas = document.getElementById('canvas') var context = canvas.getContext('2d') var angle = 0 f ...