POJ 2914 Minimum Cut (全局最小割)
【题目链接】 http://poj.org/problem?id=2914
【题目大意】
求出一个最小边割集,使得图不连通
【题解】
利用stoerwagner算法直接求出全局最小割,即答案。
【代码(递归)】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAX_N=510;
int v[MAX_N],w[MAX_N],c[MAX_N],g[MAX_N][MAX_N],S,T,now,N,M,x,y,z;
void search(){
int i,j,k,t;
for(i=0;i<N;i++)v[i]=w[i]=0;
for(S=T=-1,i=0;i<N;i++){
for(k=-INF,j=0;j<N;j++)if(!c[j]&&!v[j]&&w[j]>k)k=w[t=j];
if(T==t)return;
S=T,T=t,now=k,v[t]=1;
for(j=0;j<N;j++)if(!c[j]&&!v[j])w[j]+=g[t][j];
}
}
int stoerwagner(){
int i,j,ans=INF;
for(i=0;i<N;i++)c[i]=0;
for(i=0;i<N-1;i++){
search();
if(now<ans)ans=now;
if(ans==0)return 0;
for(c[T]=1,j=0;j<N;j++)if(!c[j])g[S][j]+=g[T][j],g[j][S]+=g[j][T];
}return ans;
}
void init(){
memset(g,0,sizeof(g));
while(M--)scanf("%d%d%d",&x,&y,&z),g[x][y]+=z,g[y][x]+=z;
}
void solve(){
printf("%d\n",stoerwagner());
}
int main(){
while(~scanf("%d%d",&N,&M)){
init();
solve();
}return 0;
}
【代码(非递归)】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAX_N=510;
int G[MAX_N][MAX_N],v[MAX_N],f[MAX_N],N,M,vis[MAX_N];
int Stoer_Wagner(){
int ret=INF;
for(int i=1;i<=N;i++)v[i]=i;
while(N>1){
int k,lst=v[1];
memset(vis,0,sizeof(vis));
memset(f,0,sizeof(f));
vis[v[1]]=1;
for(int i=2;i<=N;i++){
k=1;
for(int j=2;j<=N;j++)if(!vis[v[j]]&&(f[v[j]]+=G[lst][v[j]])>f[v[k]])k=j;
vis[v[k]]=1;
if(i<N)lst=v[k];
}ret=min(ret,f[v[k]]);
for(int j=1;j<=N;j++)G[v[j]][lst]=G[lst][v[j]]=G[lst][v[j]]+G[v[k]][v[j]];
v[k]=v[N--];
}return ret;
}
void init(){
memset(G,0,sizeof(G));
for(int i=1;i<=M;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
++x;++y;
G[x][y]+=z;G[y][x]+=z;
}
}
void solve(){printf("%d\n",Stoer_Wagner());}
int main(){
while(~scanf("%d%d",&N,&M)){
init();
solve();
}return 0;
}
POJ 2914 Minimum Cut (全局最小割)的更多相关文章
- POJ 2914 Minimum Cut 全局最小割
裸的全局最小割了吧 有重边,用邻接矩阵的时候要小心 #include<iostream> #include<cstdio> #include<bitset> #in ...
- POJ 2914 Minimum Cut【最小割 Stoer-Wangner】
题意:求全局最小割 不能用网络流求最小割,枚举举汇点要O(n),最短增广路最大流算法求最大流是O(n2m)复杂度,在复杂网络中O(m)=O(n2),算法总复杂度就是O(n5):就算你用其他求最大流的算 ...
- poj2914 Minimum Cut 全局最小割模板题
Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 8324 Accepted: 3488 Case ...
- poj 2914&&hdu 3002 全局最小割Stoer-Wagner算法模板
#include<stdio.h> #include<string.h> #include<iostream> #define inf 0x3fffffff #de ...
- POJ 2914 - Minimum Cut - [stoer-wagner算法讲解/模板]
首先是当年stoer和wagner两位大佬发表的关于这个算法的论文:A Simple Min-Cut Algorithm 直接上算法部分: 分割线 begin 在这整篇论文中,我们假设一个普通无向图G ...
- POJ 2914 Minimum Cut 最小割图论
Description Given an undirected graph, in which two vertices can be connected by multiple edges, wha ...
- POJ 2914 Minimum Cut Stoer Wagner 算法 无向图最小割
POJ 2914 题意:给定一个无向图 小于500节点,和边的权值,求最小的代价将图拆为两个联通分量. Stoer Wagner算法: (1)用类似prim算法的方法求"最大生成树" ...
- POJ 2914 Minimum Cut 最小割算法题解
最标准的最小割算法应用题目. 核心思想就是缩边:先缩小最大的边.然后缩小次大的边.依此缩小 基础算法:Prime最小生成树算法 只是本题測试的数据好像怪怪的,相同的算法时间执行会区别非常大,并且一样的 ...
- POJ 2914 Minimum Cut
Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 9319 Accepted: 3910 Case ...
随机推荐
- tomcat运行solr
https://blog.csdn.net/u010346953/article/details/67640036
- 解决使用Oracle数据库,项目启动由于表原因无法成功启动问题
1.仔细看异常信息,如果出现一个 翻译过来是 不仅仅这一张表,那就说明,在连接数据库,定位到表的时候有多张表,不知道连哪一张. 原因: 有多个用户,这两个用户下有相同的表. 就算是在不同的表空间也不 ...
- cloud.cfg_for_centos
users: - default disable_root: 0 ssh_pwauth: 1 locale_configfile: /etc/sysconfig/i18n mount_default_ ...
- 第二阶段团队冲刺-one
今天打算做什么: 处理第一次启动服务器500的问题.
- Mysql 查询—按位运算
前言:虽说这是件小事儿,但本宝宝思前想后,还是为它留下一笔,嘿嘿.反正写博客不浪费纸和笔!好久没有开启我的逗比模式了,我亲爱的乖徒弟DBA,DBB,DBAA等,好久不见你们,遥祝幸福快乐+DB. 整个 ...
- C#读取xml文件写入到TreeView中
开发过程中我们会遇到一些读取xml文件的时候,下面是我学习的整理. 用XmlDocument读取加载 XmlDocument doc = new XmlDocument(); doc.Load(&qu ...
- select chosen 禁用下拉框某一个option
$("#tbParBudCode option[value='" + budCodeId + "']").attr("disabled", ...
- shit vue-cli & path bug & baseUrl bug
vue-cli path bug https://cli.vuejs.org/zh/guide/#cli baseUrl bug baseUrl: "././" , https:/ ...
- 在HTML网页上打印需要的内容
首先在head里面加入下面一段js代码: function preview(oper) { if (oper < 10) { bdhtml = window.document.body.inne ...
- Python学习笔记(Django篇)——1、环境搭建篇(如何在Pycharm中配置Python和Django)
1.准备好以下东东,并且按照先后顺序进行安装: Python 3.6 (64-bit) Django-1.11.tar.gz pycharm-community-2016.3.2.exe 安装好了 ...