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的权总和. ...
随机推荐
- (转)QT常用快捷键
F1 查看帮助F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果)Shift+F2 声明和定义之间切换F4 头文件和源文件之间切换Ctrl+1 ...
- JS中 submit提交与Form表单里的onsubmit的调用问题?
最近在开发中遇到了表单提交前验证的问题,用一个普通的button按钮代替submit按钮,在提交前触发这个button的onclick事件,在其事件中触发form的submit事件.问题出现了: &l ...
- table 表格隔行换色实现
table 表格隔行换色实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...
- C语言笔记(结构体与offsetof、container_of之前的关系)
关于结构体学习,需要了解:结构体的定义和使用.内存对齐.结构体指针.得到结构体元素的偏移量(offsetof宏实现) 一.复习结构体的基本定义和使用 typedef struct mystruct { ...
- 浅谈iOS视频播放的N种解决方案
简 注册登录 添加关注 作者 Maru2016.03.22 20:46* 写了4349字,被135人关注,获得了207个喜欢 字数1621 阅读2895 评论43 喜欢159 header ...
- 转:So Easy!让开发人员更轻松的工具和资源
Cascade Framework 很独特的 CSS 框架,进行了模块化划分,分类排版.表格.颜色.图标和打印样式等等. Mueller Grid System 一个模块化的网格系统,用于响应式或者固 ...
- poj Monthly Expense
http://poj.org/problem?id=3273 #include<cstdio> #include<cstring> #include<cmath> ...
- HDU 3446 daizhenyang's chess
http://acm.hdu.edu.cn/showproblem.php?pid=3446 题意:一个棋盘,有个KING,有一些能走的点,每次只能走到没走过的地方,没路可走的输,求先手是否必胜. 思 ...
- 打patch p0 p1区别
如何使用patch 对于一个patch文件,有两种常用使用方法: 1.代码:cat new-patch | patch -p0 2.代码:patch -p0 < new-patch patc ...
- BZOJ 1015 [JSOI2008]星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3551 Solved: 1581[Submit ...