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。
比如雙棧排序。