正則二分圖 K 染色


啊,正則二分圖能 k 染色就不證了吧

學過好多遍,但是學一次忘一次 T^T

所以還是水成 blog 吧……

這玩意可以做一般二分圖,因為我們可以隨手補成正則二分圖。

所以,對於一般二分圖,最小染色是最大點度數。我們基於這一點魔改匈牙利。

由於每一條邊都要丟進匹配內,為了調整答案的方便,類似匈牙利每次加入一個點,我們每次加入一條邊。

同時,也使用交錯路增廣。

考慮在兩個點之間加一條邊,度數增加了 \(1\),那么我們分別取值為 \(\textrm{mex}\),記為 \(L, R\),來染色。

那么我們就要找一條 \(L, R, L, R, \dots\) 的交錯路。

我們要說明這是可以終止的。顯然不會出現環,不然與 \(\textrm{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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM