zoukankan      html  css  js  c++  java
  • 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集合中

      这样就优化了复杂度

  • 相关阅读:
    1059. C语言竞赛(20)
    1057. 数零壹(20)
    1056. 组合数的和(15)
    1054. 求平均值 (20)
    1052. 卖个萌 (20)
    1053. 住房空置率 (20)
    第五周课后作业02(动手动脑)
    课堂动手动脑
    课后作业
    课堂测试动手动脑
  • 原文地址:https://www.cnblogs.com/wmrv587/p/7627255.html
Copyright © 2011-2022 走看看