雜題選講 #1:二分圖邊著色

Physics212303發表於2024-06-12

Vizing 定理

定義

考慮如下的問題:對一個無向圖的邊進行著色,要求相鄰的邊染不同種顏色。問
需要的最少的顏色數是多少。

解決上述問題需要藉助 Vizing 定理(又稱維金定理)。

在開始之前,我們先進行一些符號的規定。

  • \(\Delta(G)\):無向圖 \(G=(V,E)\) 的最大度數,即 \(\Delta(G)=\max_{i\in V}\deg i\)
  • \(\chi(G)\):若無向圖 \(G\)\(k\) - 邊可著色的,但不是 \((k-1)\) - 邊可著色的,則稱 \(\chi(G)\)\(G\) 的邊色數,記為 \(\chi(G)\)

Vizing 定理的內容如下:

  • 對於簡單無向圖 \(G\),有 \(\Delta(G)\le\chi(G)\le\Delta(G)+1\)
  • 特別地,對於二分圖 \(G\),有 \(\Delta(G)=\chi(G)\)

我們今天僅討論後者的情況,即二分圖的邊著色。

證明

二分圖上的 Vizing 定理為什麼是正確的?

首先,必要性是顯然的——不可能用比某個點的度數還少的顏
色數完成著色。

至於充分性,使用構造性證明。考慮執行如下演算法:

對於二分圖 \(G=(V,E)\),按順序在二分圖中加邊。

加入一條邊 \((u,v)\) 時,嘗試尋找對於 \(u\)\(v\) 的編號最小且未使用過的顏色(你可以理解為 \(\mathrm{mex}\)),設為 \(A\)\(B\)

如果 \(A=B\),那麼直接將這條邊染上 \(A\)

否則令 \(A<B\),嘗試將連線 \(v\) 的顏色為 \(A\) 的邊的顏色強制改為 \(B\)

這樣可能還會產生矛盾,假設這條邊連線的另一個結點(設為 \(w\))上產生了矛盾,就把連線 \(w\) 的顏色為 \(B\) 的邊的顏色再強制改為 \(A\)……

我們發現這是一個不斷尋找增廣路並對路徑上的邊交替染色的過程。

由於二分圖不存在奇環,所以結點 \(u\) 不可能在增廣路上,否則會與“最小未使用顏色為 \(A\)”矛盾。

時間複雜度 \(O(nm)\),其中 \(n=|V|\)\(m=|E|\)

模板題 CF600F

題意簡述

構造出一組二分圖邊著色方案使得使用的顏色數最少。

資料範圍:\(1\le n_1,n_2\le 1000\)\(1\le m\le 10^5\)

題目資訊

來源:Codeforces

難度:\(\color{Red}\texttt{*2800}\)

正解

解法:完完全全的模板。實現時可以將其封裝成一個類。

參考程式碼(C++17):

Submission #247875843 - Codeforces

[SNOI2024] 拉丁方

題意簡述

定義一個 \(n \times n\) 的矩陣 \(A\) 為拉丁方,當且僅當每行每列都是一個 \(1 \sim n\) 的排列。

給定一個矩陣 \(A\) 左上角的一個 \(R \times C\) 的子矩陣,也就是 \(A_{i, j}\)\(1 \le i \le R\)\(1 \le j \le C\))。問能不能將剩下的位置填上數使得它是一個拉丁方。如果可以,構造出任意一組合法方案。

資料範圍:多測,\(1\le T\le 5\)\(1\le R,C\le n\le 500\),輸入的子矩陣不存在一行或者一列有兩個相同的數。

題目資訊

來源:陝西省 NOI 省隊選拔賽 2024 D1T3

難度:\(\color{Darkblue}\texttt{NOI/NOI+/CTSC}\)

特殊性質 B:\(C=n\)

解法:從特殊性質 B 出發,可以觀察到在這種情況下每一列要填哪些值都知道了,但是不知道每個值要填在哪一行。

於是考慮建出二分圖,由未使用的值向列連邊;因為要求同一行不能有相同的值,所以直接跑二分圖邊染色。

最終每條邊的顏色即為該值在該列的行數。

可以證明這種情況下一定有解:此時對於每種顏色所有邊構成了一組完美匹配。

正解

那麼如何將上述做法擴充套件到 \(C\) 任意的情況?

考慮把原矩陣“補”成一個 \(C=n\) 的矩陣(就是把右上角那一塊填上)再運用上述演算法。仍然使用上面的做法,這次由值向行連邊,然後每條邊的顏色就是其所在的列。注意如果使用的顏色數 \(p\ne n-C\)(此時有點度數大於 \(n-C\))那麼無解。

溫馨提示:這題時限 5s,如果你還卡不過去,那麼請把 int 換成 short。

參考程式碼(C++17):

提交記錄 #335745 - QOJ.ac

練習題 & 總結

Vizing 定理算是一個比較冷門的知識點,直到 SNOI2024 它才逐漸變得廣為人知。該型別的練習題較少,這裡有兩道可供參考:

  • UVa10615 Rooks
  • AtCoder AGC037D Sorting a Grid

參考資料:

  • 圖的著色 - OI Wiki
  • 本人題解:[SNOI2024] 拉丁方 題解 by \(\color{Red}\mathrm{FFTotoro}\)

相關文章