POJ 2914 题意:给定一个无向图 小于500节点,和边的权值,求最小的代价将图拆为两个联通分量。

Stoer Wagner算法:

(1)用类似prim算法的方法求“最大生成树”,但是它比较的权值为w(A,x)A为所有在树上的点,x不在树上。

(2)剩下最后一个节点等待加入树的时候,用W(A,xn)更新ans ,并且将最后一个节点和倒数第二个节点合并。

(3)运行N-1次“最大生成树”,就得到了答案

补充几点:(1)像这种数据规模比较小的题目,没必要用优先队列或者堆优化,反而会超时。。

(2)这道题用流输入输出会超时。。。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long int LL;
const int maxn=,maxm=maxn*maxn/;
int w[maxn][maxn],dist[maxn],m,n,point[maxn];
bool intree[maxn];
int po(int x)
{
if(x==point[x])return x;
else return point[x]=po(point[x]);
}
void combine(int a,int b)
{
a=po(a);b=po(b);
bool counted[maxn];memset(counted,,sizeof(counted));
for(int i=;i<n;i++)
{
int np=po(i);
if((np==a)||(np==b)||(counted[np]))continue;
counted[np]=true;
w[np][a]+=w[np][b];w[a][np]+=w[b][np];
}
point[b]=a;
}
int main()
{
ios::sync_with_stdio(false);
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(w,,sizeof(w));
int a,b,c;
for(int i=;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
w[a][b]+=c;w[b][a]+=c;
}
for(int i=;i<n;i++)
point[i]=i;
int ans=1e+;
for(int ii=;ii<n;ii++)
{
if(ans==)break;
memset(dist,,sizeof(dist));memset(intree,,sizeof(intree));
int pre=po(),sum=;
intree[pre]=true;
while(sum<=(n-ii))
{
int maxk=-;
bool counted[maxn];memset(counted,,sizeof(counted));
for(int i=;i<n;i++)
{
int np=po(i);
if((intree[np])||(counted[np]))continue;
counted[np]=true;
dist[np]+=w[pre][np];
if((maxk==-)||(dist[np]>dist[maxk]))
{
maxk=np;
}
}
if(maxk==-){ans=;break;}
intree[maxk]=true;
if(sum==(n-ii))
{
combine(pre,maxk);
ans=min(ans,dist[maxk]);
}
pre=maxk;
sum++;
}
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. python基础补漏-03-函数
  2. vcpu
  3. Centos下yum安装PHP
  4. MongoDB2.6 新特性
  5. git的两本推荐书
  6. hdu 5455 Fang Fang 坑题
  7. mysql触发器的例子--插入前更新数据
  8. ios Toll-Free Bridging
  9. 39. leetcode 326. Power of Three
  10. tomcat 组件研究二--请求过程
  11. Promise实现小球的运动
  12. 简述Java变量和强制转换类型
  13. 关于申请GMS认证来使用谷歌的一些服务应用及闭源API
  14. 洛谷 P2887 [USACO07NOV]防晒霜Sunscreen 解题报告
  15. oracle.exe 内存占用过大
  16. H3C路由器映射端口到外网
  17. LeetCode – LRU Cache (Java)
  18. 《算法》第五章部分程序 part 8
  19. Ubuntu 查看本机的ip
  20. 哈工大ComingX-创新工场俱乐部正式成立

热门文章

  1. u-boot源码下载
  2. object 类 toString() 和 equals() 的覆写
  3. Repository 设计模式介绍(转)
  4. eclipse安装Veloeclipse(Velocity编辑插件)
  5. permutation test
  6. 解决mysql 1032 主从错误
  7. Java经典案例之-“统计英文字母、空格、数字和其它字符的个数”
  8. zoj-3782-Ternary Calculation
  9. 天兔(Lepus)监控系统慢查询分析平台安装配置
  10. 通过RMAN克隆11g数据库(基于active database)