題意
對一張無重邊、無自環的 個點的無向圖,定義圈爲可以重複經過同一個點多次、但不能多次經過同一條邊的環。例如, 不是一個合法的圈,而 是一個合法的圈。
定義無向圖的雙圈覆蓋爲:圖的若干個圈,使得圖中每條邊恰好出現在兩個圈中(無論方向)。
一個定理:如果一個圖有哈密爾頓迴路的話,它就一定有雙圈覆蓋。
現在給定一張無重邊、無自環的 個點的無向圖,保證這個圖存在哈密爾頓迴路(會給出),且每個點的度數至少爲 。
求它的一個雙圈覆蓋。
對 的數據,.
對所有的數據,.
題解
一個圈相當於一條歐拉回路,求雙圈覆蓋相當於求一系列歐拉回路使得每條邊恰好經過次。考慮題目的特殊條件:首先是一個從依次連到的環(以下把這個稱爲環,這上面的邊稱爲環邊),再加上若干其它邊,每個點的度數不小於。
每個點的度數不小於這個條件比較奇怪,先考慮每個點度數都爲:如果每個點的度數都是,那麼可以找到一系列歐拉回路覆蓋所有邊一次;考慮把邊分爲兩組使得每組的每個點的度數都是:因爲除了環邊外的邊使得每個點的度數都爲,再加上間隔的環邊即可,這兩組再加上原來的環即符合雙圈覆蓋的要求。
問題剩下如何使每個點度數爲,考慮把一個度數的點的度數:由於環的結構不能破壞要特殊考慮,設在環上的下一個點爲,而與的非環邊個。我們需要把的一個非環邊刪掉,同時加上一條等效的邊,又要不破壞環的結構。設原來有一條非環邊連向,拆掉再新建一個點,使與相連(即把替換爲),爲了不破壞環的結構,把與相連,最後把與相連以代替原來的邊,這樣剛好有條連邊,且的度數恰好減少,其他點都不變。一直這樣下去,就可以構造出所有度數都爲的圖了。