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 ...
随机推荐
- ubuntu 下 使用GTK+、sqlite3、c语言的学生系统
使用GTK+2.0.sqlite3数据库.c语言 的简易的学生管理系统 实现了基本的增删查改 效果图:
- Clickhouse 时区转换(下)
Clickhouse 时区转换续—时区参数转换 天天加班,时间不够,主要还是我太懒,流汗,,,,,,另外如果这篇学习笔记超过100阅读量并有评论,我可能半夜也会爬起来更新的. 相信大家看我之前记录的这 ...
- 图论--网络流--最大流--POJ 1698 Alice's Chance
Description Alice, a charming girl, have been dreaming of being a movie star for long. Her chances w ...
- [UWP]推荐一款很Fluent Design的bilibili UWP客户端 : 哔哩
UWP已经有好几个Bilibili的客户端,最近有多了一个: 哔哩 - Microsoft Store 作者云之幻是一位很擅长设计的UWP开发者,我也从他那里学到了很多设计方面的技巧.它还是一位Bil ...
- SQLite使用(二)
sqlite3_exec虽然好用,但是一般不推荐直接使用. 常用的一组操作是: 关于sqlite3_exec和sqlite3_prepare_v2的使用场景,建议如下: 一个小DEMO: #inclu ...
- 入职半年多,Guide哥总结了这些帮助你领先90%程序员的好习惯!
大家好,我是 Guide 哥,这篇文章还是不分享技术文章了,我想简单聊聊一些程序员的好习惯. 其实自己写这篇文章还是很忐忑的,毕竟自己算不上一个优秀的程序员,但也不是那么差.大学学习编程 4 年,工作 ...
- 树形dp compare E - Cell Phone Network POJ - 3659 B - Strategic game POJ - 1463
B - Strategic game POJ - 1463 题目大意:给你一棵树,让你放最少的东西来覆盖所有的边 这个题目之前写过,就是一个简单的树形dp的板题,因为这个每一个节点都需要挺好处 ...
- 记忆化搜索 E - Loppinha, the boy who likes sopinha Gym - 101875E
E - Loppinha, the boy who likes sopinha Gym - 101875E 这个题目是一个dp,这个应该很容易看出来,但是对于状态的定义其实有点难去想, 看了题解dp[ ...
- Node教程——封装一个token验证器
重要说明 这个轮子是 使用 express@5.0 + MongoDB构建起来的一个 node后台通用的验证器,里面主要讲的就是使用jwt,token进行验证,当然你想使用session也没问题,但是 ...
- [UVA Live 12931 Common Area]扫描线
题意:判断两个多边形是否有面积大于0的公共部分 思路:扫描线基础. #pragma comment(linker, "/STACK:10240000") #include < ...