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集合中

      这样就优化了复杂度

  • 相关阅读:
    02_虚拟机参数
    01_java虚拟机基础入门
    03_模板消息
    Redis 实现分布式锁
    01_微信小程序支付
    python产生随机字符串
    输出的编码
    jmeter MD5加密
    vscode 插件推荐
    appium自动化安装(二)
  • 原文地址:https://www.cnblogs.com/wmrv587/p/7627255.html
Copyright © 2011-2022 走看看