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

  • 相关阅读:
    改变Ecplise项目窗口字体样式
    反射笔记
    日期、时间戳、字符串之间的转换
    Ajax处理后台返回的Json数据
    Ajax动态切换按钮
    生成随机数验证码
    Apache-SimpleEmail 简单应用
    Apache-POI 简单应用
    JavaMail API的应用
    checkbox怎么判断是否选中
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/14847305.html
Copyright © 2011-2022 走看看