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的更多相关文章

  1. POJ2914 (未解决)无向图最小割|Stoer-Wagner算法|模板

    还不是很懂,贴两篇学习的博客: http://www.hankcs.com/program/algorithm/poj-2914-minimum-cut.html http://blog.sina.c ...

  2. poj2914无向图的最小割模板

    题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...

  3. poj2914 Minimum Cut 全局最小割模板题

    Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 8324   Accepted: 3488 Case ...

  4. POJ2914 Minimum Cut —— 最小割

    题目链接:http://poj.org/problem?id=2914 Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Sub ...

  5. poj2914无向图的最小割

    http://blog.csdn.net/vsooda/article/details/7397449 //算法理论 http://www.cnblogs.com/ylfdrib/archive/20 ...

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

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

  7. 图论:Stoer-Wagner算法

    利用Stoer-Wagner算法求无向图最小割 直接给出算法描述和过程实现: 算法步骤: . 设最小割cut=INF, 任选一个点s到集合A中, 定义W(A, p)为A中的所有点到A外一点p的权总和. ...

随机推荐

  1. C++ Primer 5th 第10章 泛型算法

    练习10.1:头文件algorithm中定义了一个名为count的函数,它类似find,接受一对迭代器和一个值作为参数.count返回给定值在序列中出现的次数.编写程序,读取int序列存入vector ...

  2. ubantu-命令-进入超级用户

    sudo su; 建立文件夹 mkdir ulike_work;

  3. ggts下载地址

    地址:http://spring.io/tools/ggts See All Versions可以下载更多版本,里面包含安装版和解压版

  4. js与jquery获取父元素,删除子元素的不同方法

    var obj=document.getElementById("id");得到的是dom对象,对该对象进行操作的时候使用js方法 var obj=$("#id" ...

  5. 【行为型】Mediator模式

    中介者模式目的是将对象间的交互封装在一个对象中,从而使用各对象间的相互依赖解耦,并可以独立更改对像间的交互.在实际项目开发过程中,因某些原因(如:业务逻辑处理不当或设计不当等)使得多个不同对象间需要相 ...

  6. cf C. Inna and Dima

    http://codeforces.com/contest/374/problem/C 记忆化搜索,题意:求按照要求可以记过名字多少次,如果次数为无穷大,输出Poor Inna!,如果不经过一次输出P ...

  7. mysql通过SOURCE导入SQL时报错处理

    ERROR: unknown command '\n' Can't connect to the server 网上查询了,多少是编码问题引起,一边是UTF8一边是GBK,反复调整MY.CNF配置文件 ...

  8. C#程序设计基础——常量

    C#程序设计基础——常量 常量是在编译时已知,并且在程序的生存期内不发生更改的不可变值.常量使用const修饰符进行声明. 常量必须在声明时初始化,且常量的类型必须为以下类型之一:sbyte/byte ...

  9. thickbox 关于动态生成 无法跳出弹出框的问题

    问题描述: 用jQuery动态生成thickbox的连接代码,发现没有效果. 原因: thickbox在页面加载后,会给a,input,area等绑定弹出事件. 通过tb_init(’a.thickb ...

  10. POJ3295 Tautology(枚举)

    题目链接. 分析: 最多有五个变量,所以枚举所有的真假值,从后向前借助于栈验证是否为永真式. #include <iostream> #include <cstring> #i ...