zoukankan      html  css  js  c++  java
  • UOJ444【集训队作业2018】二分图【构造,结论】

    类似这道题,颜色数不一定是 (2) 了。

    (nle 20)(kle 10)(qle 5cdot 10^5)


    实际上方法不太一样,所以不是原题?

    前置知识:二分图边染色(Vizing 定理)

    对于二分图,可以用度数最大值个颜色给每条边染色,使得相邻边颜色不同。

    构造方法直接按顺序遍历边,设当前尝试加入 ((x,y)),设 (x,y) 的尚未用过的最小编号为 (c_x,c_y),若 (c_x=c_y) 则染 (c_x) 色即可,否则不妨设 (c_x<c_y),则尝试把 (y) 连出的颜色为 (c_x) 的边的颜色改为 (c_y),一直这样找下去就是从 (y) 出发,依次经过 (c_x,c_y,c_x,c_y,cdots) 色的增广路,容易发现这个增广路不会自交,所以一定会停在其他某个点上,直接反色即可。每次修改的时间复杂度 (O(n))

    对应到这题,就直接拆点,假设当前点 (x) 度数为 (d_x),就拆成 (lfloor d_x/k floor) 个度数为 (k) 的点,当 (k mid d_x) 时再搞一个度数为 (d_xmod k) 的点。然后加边就按上面方法做,删边的话就如果这条边连的不是当前点最后一个拆出来的点,就从最后一个点拆一条边过来。

    时间复杂度 (O(qn^2/k)),实现还是有点烦的,建议看代码

  • 相关阅读:
    编程原理
    VMware
    window的composer安装
    微信小程序支付的坑
    php 生成二维码
    接口文档在线编辑
    mysql函数的使用
    linux的反斜扛的问题
    require_once中使用./和../时遇到的坑
    微信测试账号申请后,登陆空白的现象
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/14847305.html
Copyright © 2011-2022 走看看