zoukankan      html  css  js  c++  java
  • 正则二分图 K 染色

    啊,正则二分图能 k 染色就不证了吧

    学过好多遍,但是学一次忘一次 T^T

    所以还是水成 blog 吧……

    这玩意可以做一般二分图,因为我们可以随手补成正则二分图。

    所以,对于一般二分图,最小染色是最大点度数。我们基于这一点魔改匈牙利。

    由于每一条边都要丢进匹配内,为了调整答案的方便,类似匈牙利每次加入一个点,我们每次加入一条边。

    同时,也使用交错路增广。

    考虑在两个点之间加一条边,度数增加了 (1),那么我们分别取值为 ( extrm{mex}),记为 (L, R),来染色。

    那么我们就要找一条 (L, R, L, R, dots) 的交错路。

    我们要说明这是可以终止的。显然不会出现环,不然与 ( extrm{mex}) 或染色矛盾。

    这样不断加入边,就可以一直维护染色的性质。

    每次访问 (O(n)) 个点,复杂度 (O(nm))

    void dfs(int l, int r, int x, int y, int cx, int cy) {
    	col[l][x][cx] = y;
    	if (int v = col[r][y][cx])
    		col[l][v][cx] = 0, dfs(r, l, y, v, cy, cx);
    	col[r][y][cx] = x;
    }
    void adde(int x, int y) {
    	int ca, cb;
    	for (ca = 1; col[0][x][ca]; ++ca) ;
    	for (cb = 1; col[1][y][cb]; ++cb) ;
    	dfs(0, 1, x, y, ca, cb);
    }
    
  • 相关阅读:
    python给邮箱发送消息
    shell 的echo和 printf
    shell 基本运算符
    shell傳遞參數
    shell變量和數組
    pycharm的放大和缩小字体的显示 和ubunt的截圖工具使用 ubuntu上安装qq微信等工具
    flask的g对象
    mysqlcilent的安装
    Ubuntu安装 和 python开发
    使用python来建立http服务
  • 原文地址:https://www.cnblogs.com/daklqw/p/13629043.html
Copyright © 2011-2022 走看看