求全局最小割(SW算法)
King of Destruction
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1022 Accepted Submission(s): 400
is to destroy the wooden plank between some wooden pegs,in order to cut these wooden pegs into two disconnected parts,and destroy each piece of plank need consume different energy.However Zhou xingxing is beginner after all,so he is turn to you for help,please
calculate the minimum energy he need to destroy the wooden plank.
Each test case starts with two integers n (0 < n <= 100) and m in one line, where n、m are the number of wooden pegs and wooden plank.
Following are m lines, each line contains three integers s, e and q (0 <= s, e < n,q > 0), meaning that there need q energy to destroy the wooden plank between s and e.
2 1
0 1 50
3 2
0 1 50
1 2 10
50
10
题意:求无向图的最小割。思路:无向图的最小割又叫全局最小割,枚举汇点求最大流效率很低,因而普遍使用StoerWagner算法,时间复杂度为O(n^3)。程序:#include"stdio.h"
#include"string.h"
#define inf 99999999
int G[666][666],ans;
int min(int a,int b)
{
return a<b?a:b;
}
int f[666];
int finde(int x)
{
if(x!=f[x])
f[x]=finde(f[x]);
return f[x];
}
void make(int a,int b)
{
int x=finde(a);
int y=finde(b);
if(x!=y)
f[x]=y;
}
void Mincut(int n)
{
ans=inf;
int node[666],dis[666];
bool use[666];
int i,k,pre;
for(i=0;i<n;i++)
node[i]=i;
while(n>1)
{
int maxj=1;
for(i=1;i<n;i++)//初始化到已圈集合的割大小
{
dis[node[i]]=G[node[i]][node[0]];
if(dis[node[maxj]]<dis[node[i]])
{
maxj=i;
}
}
pre=0;
memset(use,false,sizeof(use));
use[node[0]]=true;
for(k=1;k<n;k++)
{
if(k==n-1)//只剩最后一个没加入集合的点,更新最小割
{
ans=min(ans,dis[node[maxj]]);
for(i=0;i<n;i++)//合并最后一个点以及推出它的集合中的点
{
G[node[i]][node[pre]]=G[node[pre]][node[i]]+=G[node[i]][node[maxj]];
}
node[maxj]=node[--n];//缩点后的图
}
use[node[maxj]]=true;
pre=maxj;
maxj=-1;
for(i=1;i<n;i++)
{
if(!use[node[i]])
{
dis[node[i]]+=G[node[i]][node[pre]];//将上次求的maxj加入集合,合并与它相邻的边到割集
if(maxj==-1||dis[node[maxj]]<dis[node[i]])
maxj=i;
}
}
}
}
}
int main()
{
int n,m,i;
while(scanf("%d%d",&n,&m)!=-1)
{
memset(G,0,sizeof(G));
for(i=0;i<n;i++)
{
f[i]=i;
}
while(m--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
G[a][b]=G[b][a]+=c;
make(a,b);
}
int flag=0;
for(i=0;i<n;i++)
{
if(finde(i)!=finde(0))
flag++;
}
if(flag)
printf("0\n");
else
{
Mincut(n);
printf("%d\n",ans);
} }
}
求全局最小割(SW算法)的更多相关文章
- SW算法求全局最小割(Stoer-Wagner算法)
我找到的唯一能看懂的题解:[ZZ]最小割集Stoer-Wagner算法 似乎是一个冷门算法,连oi-wiki上都没有,不过洛谷上竟然有它的模板题,并且2017百度之星的资格赛还考到了.于是来学习一下. ...
- poj 2914(stoer_wanger算法求全局最小割)
题目链接:http://poj.org/problem?id=2914 思路:算法基于这样一个定理:对于任意s, t V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Cont ...
- HDU 3691 Nubulsa Expo(全局最小割Stoer-Wagner算法)
Problem Description You may not hear about Nubulsa, an island country on the Pacific Ocean. Nubulsa ...
- HDU 6081 度度熊的王国战略(全局最小割Stoer-Wagner算法)
Problem Description 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更 ...
- 全局最小割StoerWagner算法详解
前言 StoerWagner算法是一个找出无向图全局最小割的算法,本文需要读者有一定的图论基础. 本文大部分内容与词汇来自参考文献(英文,需***),用兴趣的可以去读一下文献. 概念 无向图的割:有无 ...
- 全局最小割Stoer-Wagner算法
借鉴:http://blog.kongfy.com/2015/02/kargermincut/ 提到无向图的最小割问题,首先想到的就是Ford-Fulkerson算法解s-t最小割,通过Edmonds ...
- POJ 2914:Minimum Cut(全局最小割Stoer-Wagner算法)
http://poj.org/problem?id=2914 题意:给出n个点m条边,可能有重边,问全局的最小割是多少. 思路:一开始以为用最大流算法跑一下,然后就超时了.后来学习了一下这个算法,是个 ...
- [全局最小割][Stoer-Wagner 算法] 无向图最小割
带有图片例子的 [BLOG] 复杂度是$(n ^ 3)$ HDU3691 // #pragma GCC optimize(2) // #pragma GCC optimize(3) // #pragm ...
- poj 2914&&hdu 3002 全局最小割Stoer-Wagner算法模板
#include<stdio.h> #include<string.h> #include<iostream> #define inf 0x3fffffff #de ...
随机推荐
- 第二百九十二节,RabbitMQ多设备消息队列-Python开发
RabbitMQ多设备消息队列-Python开发 首先安装Python开发连接RabbitMQ的API,pika模块 pika模块为第三方模块 对于RabbitMQ来说,生产和消费不再针对内存里的一 ...
- 修改MySQL的默认密码的四种小方法
投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-09-05我要评论 对于windows平台来说安装完MySQL后,系统就已经默认生成了许可表和账户,下文中就教给大家如何修改MyS ...
- 未能在当前目标框架中解析主引用“System.Net.Http”,它是一个框架程序集。“.NETFramework,Version=v4.0”。若要解决此问题,请移除引用“System.Net.Http”,或将应用程序的目标重新指向包含“System.Net.Http”的框架版本。 Zephyr.Web
解决方法:升级项目到.net framework 4.5
- mysql 中查看指定表的字段名 (可根据字段变量生成c#后台代码)
select DISTINCT data_type from COLUMNS where table_name='表名' 用ConCat();构造生成代码.....
- 小知识(class文件查看jdk版本,beyond,could not find setter)
最近几天工作当中遇到了一些问题,所以记录下来. 1.如何查看class文件的sdk版本 2.beyond compare比对文件 3.Could not find setter for native_ ...
- Java几款性能分析工具的对比
在给客户的应用程序维护的过程中,我注意到在高负载下的一些性能问题.理论上,增加对应用程序的负载会使性能等比率的下降.然而,我认为性能下降的比率远远高于负载的增加.我也发现,性能可以通过改变应用程序的逻 ...
- select自定义小三角样式
这段代码是网上大部分的解决办法,在这里总结一下: 让select透明,上面加一个span,来替换select框,可以自定义小三角样式,也可以做出select文字居中的效果. <div class ...
- win7 自带计算机(for programmer)
打开win7的Accessories, 看到Calculator, 点击打开计算器. 可以看到32位的2进制代码:
- Windows网络编程Internet Gopher了解下
Gopher:中文译“地鼠”,是迪士尼卡通人物之一(谷佛). 英文原义:The Internet Gopher Protocol 中文释义:(RFC-1436)网际Gopher协议 该系统是在明尼苏达 ...
- MySQL<表单&集合查询>
表单查询 简单查询 SELECT语句 查询所有字段 指定所有字段:select 字段名1,字段名2,...from 表名; select * from 表名; 查询指定字段 select 字段名1,字 ...