全图最小割(Stoer-Wagner算法)

全图最小割大致是来解决这样一类问题:
给定一个n个点m条边的无向图,每条边有一个最大流量,给定一个源点s,求以哪个点作为汇点可以使整个图的最大流最小。

思路分两步(引用网上的普遍解析):
一:找到S - T的最小割Mincut,其中S 和 T为最后并入集合的两个点。
1,初始化数组vis 和 wage;
2,遍历所有不在集合且没有被合并的点,找到最大wage值的点Next,并记录Mincut、S和T;
3,Next并入集合,叠加与Next相连的所有点(不在集合 且 没有被合并),更新这些点的wage值;
4,重复操作2和3一共N次 或者 找不到新的Next值时 跳出,返回Mincut;
二、找全局最小割ans,需要重复第一步N-1次,因为每次合并一个点,最多合并N-1个点;
1,每次对返回的Mincut,更新ans = min(ans, Mincut),当然ans为0时,说明图不连通;
2,把点T合并到S点,操作有:对 所有没有被合并的点j,Map[S][j] += Map[T][j]。

模板:

int Map[MAXN][MAXN];//从(1,1)开始
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值