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. Linux 查看文件内容的命令

    转载自:新浪博客 (观看档案内容 : cat, tac, more, less, head, tail, nl, 刚刚我们提到的都只是在于显示档案的外观,或者是移动与复制一个档案或目录而已,那么如果我 ...

  2. jquery mobile展开项collapsible

    代码演示 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  3. jQuery图片提示示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. NET Core 数据保护2

    ASP.NET Core 数据保护(Data Protection 集群场景)[下]   前言 接[中篇],在有一些场景下,我们需要对 ASP.NET Core 的加密方法进行扩展,来适应我们的需求, ...

  5. C++类型转换总结

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast, ...

  6. BZOJ 1025 [SCOI2009]游戏

    1025: [SCOI2009]游戏 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1533  Solved: 964[Submit][Status][ ...

  7. Hive SQL运行状态监控(HiveSQLMonitor)

    引言   目前数据平台使用Hadoop构建,为了方便数据分析师的工作,使用Hive对Hadoop MapReduce任务进行封装,我们面对的不再是一个个的MR任务,而是一条条的SQL语句.数据平台内部 ...

  8. #include <sys/stat.h>的作用

    #include <sys/stat.h> 文件状态, 是unix/linux系统定义文件状态所在的伪标准头文件. 含有类型与函数: dev_t     st_dev     Device ...

  9. HDOJ的题目分类

    模拟题, 枚举 1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 10 ...

  10. call-template和apply-templates

    对xml模板 来说,name属性是很关键的 call-template /apply-template 的name必须要和模板的name相对应.模板相当于一个函数,可以暂时这么看.而name相当于函数 ...