poj2914无向图的最小割
http://blog.csdn.net/vsooda/article/details/7397449
//算法理论 http://www.cnblogs.com/ylfdrib/archive/2010/08/17/1801784.html
http://blog.csdn.net/i_love_home/article/details/9698791
以上是参考的博客
无向图的最小割我的理解就是先固定一个点,那么其余的点和他的关系就是是否在同一个集合内,既然要求最小割那么和他相连的最大的边最开始肯定是不切割的,而是将它看做和固定点同一个集合用于更新其余点的距离状态,而按照这样贪心的话只能保证局部最优而保证不了全局最优,因为可能与固定点连的最小的边的点可能和其余的点有一个非常大的连边,所以需n次循环弥补,相当于对每种可能的情况都进行了探索,有点贪心加枚举的感觉,向每一个有可能最优的情况探索,这样就大大减小了搜索的范围,然后又因为每次执行的步骤都一样,所以也被人叫迭代?。很有意思的一个算法。
#include<cstdio>
#include<cstring>
#include<algorithm>
const int N=;
using namespace std;
int mat[N][N];
int res;
void Mincut(int n) //注意写的时候不要丢node
{
int dist[N],node[N];
bool vis[N];
for(int i=; i<n; ++i) node[i]=i;
while(n>)
{
int maxx=,prev=0;
for(int i=; i<n; ++i)
{
dist[node[i]]=mat[node[]][node[i]];
if(dist[node[i]]>dist[node[maxx]]) maxx=i;
}
memset(vis,,sizeof(vis)); //每次都要更新vis
vis[node[]]=;
for(int i=; i<n; ++i)
{
if(i==n-)
{
res=min(res,dist[node[maxx]]);
for(int k=; k<n; ++k)
mat[node[k]][node[prev]]=(mat[node[prev]][node[k]]+=mat[node[maxx]][node[k]]); //看清楚這
node[maxx]=node[--n];
}
vis[node[maxx]]=;
prev=maxx;
maxx=-;
for(int j=; j<n; ++j) if(!vis[node[j]])
{
dist[node[j]]+=mat[node[prev]][node[j]]; //更新的时候注意是prev,因为在更新的时候顺便把下一次循环的最大值搞了出来
if(maxx==-||dist[node[j]]>dist[node[maxx]])
maxx=j;
}
}
}
return ;
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
res=;
int u,v,w;
memset(mat,,sizeof(mat));
while(m--){
scanf("%d%d%d",&u,&v,&w);
mat[u][v]+=w;
mat[v][u]+=w;
}
Mincut(n);
printf("%d\n",res);
}
}
poj2914无向图的最小割的更多相关文章
- poj2914无向图的最小割模板
题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...
- ZOJ 2753 Min Cut (Destroy Trade Net)(无向图全局最小割)
题目大意 给一个无向图,包含 N 个点和 M 条边,问最少删掉多少条边使得图分为不连通的两个部分,图中有重边 数据范围:2<=N<=500, 0<=M<=N*(N-1)/2 做 ...
- POJ2914 Minimum Cut —— 最小割
题目链接:http://poj.org/problem?id=2914 Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Sub ...
- King of Destruction HDU - 3002 && HDU - 3691(全局最小割)
求无向图的最小割 有没有源点都一样,不影响 #include <iostream> #include <cstdio> #include <sstream> #in ...
- 全局最小割Stoer-Wagner算法
借鉴:http://blog.kongfy.com/2015/02/kargermincut/ 提到无向图的最小割问题,首先想到的就是Ford-Fulkerson算法解s-t最小割,通过Edmonds ...
- POJ 2914 Minimum Cut【最小割 Stoer-Wangner】
题意:求全局最小割 不能用网络流求最小割,枚举举汇点要O(n),最短增广路最大流算法求最大流是O(n2m)复杂度,在复杂网络中O(m)=O(n2),算法总复杂度就是O(n5):就算你用其他求最大流的算 ...
- 全局最小割StoerWagner算法详解
前言 StoerWagner算法是一个找出无向图全局最小割的算法,本文需要读者有一定的图论基础. 本文大部分内容与词汇来自参考文献(英文,需***),用兴趣的可以去读一下文献. 概念 无向图的割:有无 ...
- 求全局最小割(SW算法)
hdu3002 King of Destruction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...
- 最小割分治(最小割树):BZOJ2229 && BZOJ4519
定理:n个点的无向图的最小割最多n-1个. 可能从某种形式上形成了一棵树,不是很清楚. 最小割分治:先任选两个点求一边最小割,然后将两边分别递归,就能找到所有的最小割. 这两个题是一样的,直接搬din ...
随机推荐
- 深拷贝、浅拷贝与Cloneable接口
深拷贝与浅拷贝 浅拷贝 public class Student implements Cloneable{ Integer a; Integer b; @Override protected Obj ...
- 第三方库 正则表达式re模块
正则表通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式通常缩写成“regex”,单数有regexp.regex,复数有regexps.regexes.regexen. 正则表达式是对字 ...
- [20170616]recover copy of datafile 6.txt
[20170616]no copy of datafile 6 found to recover.txt --//最近几天一直被这个问题纠缠,我虽然不知道问题在哪来,还是找到简单的解决方法,做1个记录 ...
- 最小生成树之prime算法
public class Prime { public static void main(String[] args) { //路径矩阵 int arcs[][] = {{-1,6,1,5,-1,-1 ...
- Oliver Twist
对于济贫院那些绅士们而言,贫民好吃懒做.贪得无厌.他们消耗的食物即是对教区最大的威胁. 绅士们的利益得不到满足时,孤儿们只能被驱之而后快,甚至被"加价出售". 然而,眼泪这种东西根 ...
- tar命令基本、进阶使用指北
tar命令基本.进阶使用指北 摘要 打包与压缩是我们在计算机系统日常使用中必备的一个工具,就如我们在使用Windows系统,也需要类似WinRAR的压缩软件来将许多数据.文件打包成一个文件,并压缩其占 ...
- Python2 与 Python3 的区别
python解释器默认编码(python2与python3的区别一) python2 解释器默认编码:ascii python3 解释器默认编码:utf-8 输入(python2与python3的区别 ...
- 课堂管理系统;在线教辅平台;java课设
# 白泽智慧教辅平台 **说明:** 运行时需要修改位置: bzedu\src\main\resources\application.properties bzedu\src\main\resourc ...
- 题目分享E 二代目
题意:一棵点数为n的树,每个节点有点权,要求在树中中找到一个最小的x,使得存在一个点满足max(该点点权,该点相邻的点的点权+1,其他点的点权+2)=x 分析:首先要能把题目转化为上述题意 首先题目让 ...
- zabbix监控hbase
项目地址:https://github.com/Staroon/zabbix-hadoop-template/tree/master/hbase-master-template (1).下载脚本,将其 ...