• 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)),实现还是有点烦的,建议看代码

  • 相关阅读:
    迭代模型
    螺旋模型
    瀑布模型
    V模型
    codeforces411div.2
    专题1:记忆化搜索/DAG问题/基础动态规划
    Python
    字符串的相关操作方法
    Python基本数据类型
    编码
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/14847305.html
Copyright © 2020-2023  润新知