【學習記錄】二分圖染色

Q:什麼是二分圖?
A:一張圖,如果能把所有頂點分成兩份,每一份中的頂點都互不連接,並且每個頂點都與另一份中的某一個或幾個頂點有邊相連,那麼這個圖就是二分圖。

Q:二分圖能幹什麼?
A:染色、匹配。染色剛學了,匹配不會,也不打算學。

Q:什麼是二分圖染色?
A:假設有紅黑兩種顏色。從一個頂點出發,先把這個頂點染成紅色,再把與這個頂點相鄰的所有頂點染成黑色,再把與黑色頂點們相鄰的所有頂點染成紅色……使得任意兩個相鄰的頂點顏色不同。

Q:二分圖染色能幹什麼?
A:能染色。↓


相關題目:codevs 1535 封鎖陽光大學
算是個裸題。求“最少需要多少隻河蟹”。需要處理的地方是找兩種顏色數量的最小值。
二分圖染色的題目要格外注意子圖與子圖之間可能不連通,存在多個聯通子圖。所以要這樣染色:

    for(int i=1;i<=n;i++)
    {
        if(!color[i])
        {
            if(colour(i)==-1)
            {
                puts("Impossible\n");
                return 0;
            }
        }
    }

遍歷每個點,沒染色的染色。


二分圖染色還可以用作二分的檢查過程。按照答案的限定將整張圖染色,如果染色成功則說明答案合法。

codevs 1069 關押罪犯
二分+二分圖染色
求最小的最大–>二分
從大到小排序,
二分衝突值,染色check。若染色成功,則答案合法,縮小二分值。
codevs一直wa兩個點調不出來的原因是tot沒有初始化。所以初始化時要將上一次建圖的所有信息都初始化一遍。並且bool函數不能return-1,return一個除了0的數都是默認爲return1.


由於二分圖染色實現難度不大,所以noip考二分圖染色的姿勢是讓人看不出這是個二分圖染色QWQ。
比如雙棧排序。

發佈了150 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章