儘管如此,弦圖依舊強大

JiaY19發表於2024-06-29

一些定義

最小染色:用最少的顏色給點染色使得所有邊連線的兩點顏色不同。

色數:最小染色的顏色數。

團數:最大團的點數。

弦:連線環中不相鄰兩點的邊。

弦圖:任意長度大於 \(3\) 的環都有一個弦的圖稱為弦圖。

點割集:對於圖 \(G\) 上的兩點 \(u,v\),定義這兩點間的點割集為滿足刪除這一集合後,\(u,v\) 兩點之間不連通。

單純點:若點 \(x\) 與他的所有相鄰點的匯出子圖是一個團,則這個點是單純點。

完美消除序列:令 \(n=|V|\),完美消除序列 \(v_1,v_2,\cdots ,v_n\)\(1,2,\cdots ,n\) 的一個排列,滿足 \(v_i\)\(\{v_i,v_{i+1},\cdots ,v_n\}\) 的匯出子圖中為單純點。

一些性質

性質一

團數 \(\le\) 色數。

證明:
直接對最大團染不同顏色即可。

推論一

在弦圖中:團數 \(=\) 色數。

性質二

最大獨立集數 \(\le\) 最小團覆蓋數。

證明:
每個團中至多選擇一個點。

推論二

在弦圖中:最大獨立集數 \(=\) 最小團覆蓋數。

性質三

弦圖的任意匯出子圖一定是弦圖。

證明:
如果弦圖有匯出子圖不是弦圖,說明在這個匯出子圖上存在大於 \(3\) 的無弦環,那麼原圖也不是弦圖,矛盾。

性質四

任何一個弦圖都至少有一個單純點,不是完全圖的弦圖至少有兩個不相鄰的單純點。

性質五

一個無向圖是弦圖當且僅當其有一個完美消除序列。

求法

求出無向圖的完美消除序列

最大勢演算法(MCS)是一種可以在 \(O(n+m)\) 的時間複雜度內求出無向圖的完美消除序列的方法。

思路

逆序給結點編號,即按從 \(n\)\(1\) 的順序給點標號。

\(label_x\) 表示第 \(x\) 個點與多少個已經標號的點相鄰。

每次選擇 \(label\) 值最大的未標號結點進行標號即可。

時間複雜度:\(O(n+m)\)

Code

inline void mcs() {
  fro(i, 1, n) to[0].push_back(i);
  int sum = 0;
  pre(pos, n, 1) {
    int x = 0, y;
    while (!x) {
      while (to[sum].empty() == 0 && !x) {
        y = to[sum].back();
        if (!rk[y] && lb[y] == sum) x = y;
        to[sum].pop_back();
      }
      if(!x) sum--;
    }
    rk[x] = pos, id[pos] = x;
    for (int i = head[x]; i; i = e[i].nxt)
        lb[e[i].to]++, to[lb[e[i].to]].push_back(e[i].to), sum = max(sum, lb[e[i].to]);
  }
}

此演算法可以證明,若無向圖為弦圖,則求出的序列一定是完美消除序列。

同樣,若求出的序列為完美消除序列,則無向圖一定是弦圖。

判斷一個序列是否是完美消除序列

根據完美消除序列的定義,設 \(v_i 在 {v_i,v_{i+1},\ldots , v_n}\) 中相鄰的點從小到大為 \(\{v_{c_1},v_{c_2},\ldots ,v_{c_k} \}\)

則只需判斷 \(v_{c_1}\) 與其他點是否直接連通即可。

時間複雜度 \(O(n+m)\)

挑戰 NPC

各種不可做的圖論問題在弦圖上通通可以線性計算。

弦圖實在是太厲害了。

求極大團

\(N(x)\) 為滿足與 \(x\) 相鄰且在完美消除序列上的 \(x\) 之後的點集。

則弦圖的極大團只有可能為為 \(\{x\}+N(x)\)

求最大團

將所有的極大團取最大值即可。

也就是:\(\max_{i=1}^n lable_i+1\)

求色數

由於色數 \(=\) 團數,所以可以直接求最大團得到色數。

若需要方案。

可以在完美消除序列上從後往前染色,每個點染能染的最小顏色即可。

求最大獨立集

完美消除序列從前往後,選擇所有沒有與已經選擇的點有直接連邊的點。

求最小團覆蓋

設最大獨立集為 \(\{v_1,v_2,\ldots ,v_t\}\),則團的集合 \(\{\{v_1+N(v_1)\},\{v_2+N(v_2)\},\ldots ,\{v_t+N(v_t)\} \}\) 為圖的最小團覆蓋。

相關文章