51nod 1499 (最小割)

本文介绍了一个将点集划分成两部分的问题,并将其转化为最小割问题进行求解的方法。通过构造特殊的网络流图,使得割断的边权值之和最小,从而实现原问题中完美值的最大化。

题意

分析

  将一些点分成两个集合,很明显的最小割问题

  设一个S、T,和S相连的点表示在B集合中,和T相连的点表示在A集合中

  因为原题是完美值最大,我们转换一下,变成损失的价值最小,那么就是最小割问题了

  对于两个点(u,v),如果有边相连,那么u->T v->T 权值是|u-v|;如果无边,那么S->u S->v,权值是|u-v|

  光这样够吗?我们发现,如果u和S相连,v和T相连,那么不仅S->v的价值得不到了,S->u的价值也得不到了,那么该如何处理呢?

  我们对于任意一个点对(u,v),都连一条u->v 边权是|u-v|的边,那么出现上面这种情况的时候这条边一定也会被割掉

  这样跑最小割就行了,最后结果除以2

  分析建图可以知道,S->u->v->T 边权都是|u-v|,所以割的时候可以都选择割S->u或者v->T的边,即最后的结果一定是所有点都在A集合中或者B集合中

  这样就优化了复杂度

 

转载于:https://www.cnblogs.com/wmrv587/p/7627255.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值