基環樹和笛卡爾樹

ccjjxx發表於2024-06-23

1.基環樹

定義:有\(n\)個點和\(n\)條邊的圖,就是給樹連了一條邊,此時圖中恰好只有一個環

解決這類問題時,通常斷環,變成普通的樹的問題,然後再特殊處理環

P2607 [ZJOI2008] 騎士

click

斷環成樹後就跟沒上司一樣是個樹形dp,注意森林,long long就行了,具體細節見這裡

P5022 [NOIP2018 提高組] 旅行

click

  • \(m = n - 1\)

就是樹

肯定以\(1\)為起點,每次向下搜之前對能到的城市排個序,挑小的走

期望\(60pts\),實測\(60pts\)

這裡面排序那個for上限應該是n寫錯了所以56

  • \(m = n\)

基環樹,沒森林

考慮列舉刪掉的邊,每刪一條,就跑一遍情況1,是\(O(nm)\)

谷上可過,gxyz過不了,T了3個,這是穀子結果,應該是更答案慢了些

可以剪枝最佳化,就是每走一步就看優不優,不優就不走了

like this

P4381 [IOI2008] Island

click

題目要求的是基環樹森林中每個單元的直徑之和

我們考慮一下基環樹內的直徑型別:過環的和不過環的

(ps:不過環的放這圖是我一開始沒想到)

對於不過環的,可以預處理,接下來考慮帶環的

如果\(i,j\)是直徑出入環的兩點,那麼該直徑可以分解為環上一部分和以\(i,j\)為端點的兩根鏈

暴力就是列舉\(i,j\),將對應部分求得並加在一起,從中取最大與第一種情況比最大就行

可以混\(50\)

相關文章