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);
    }
    
  • 相关阅读:
    c# udp局域网通信
    wpf 空白汉字占位符
    直角三角形知道变长求夹角
    windowsphone 的IsolatedStorageSettings存储类型
    WPFUIElement的Background的问题
    oracle外表
    oracle安装
    数据库ddl,dml,dcl
    OLTP与OLAP的介绍
    四种XML解析方式详解
  • 原文地址:https://www.cnblogs.com/daklqw/p/13629043.html
Copyright © 2011-2022 走看看