換根dp的通法:1.第一次掃描時,任選一個點為根,在“有根樹”上執行一次樹形DP,也就在回溯時發生的,自底向上的狀態轉移。 2.第二次掃描時,從剛才選出的根出發,對整棵樹執行一次dfs,在每次遞歸前進行自上向下的推導,計算出換根后的解。 例題POJ3585 Accumulation ...
換根法思想為, ,隨便找一個點作為根進行dp, ,再以原來點為根進行dp,此次dp,設最優解為 f x ,那么f root d root ,這是顯而易見的 然后再通過找d son 與f x 之間關系進行dp 比如本道題,若f x 已知最優解,那么把son換成根,f x 的最優解即為 d v f x min d v ,w x,v 類似點分治求重心,通過與父親值做減法,求出樹上除v子樹外最優值 amp ...
2018-08-04 16:03 1 904 推薦指數:
換根dp的通法:1.第一次掃描時,任選一個點為根,在“有根樹”上執行一次樹形DP,也就在回溯時發生的,自底向上的狀態轉移。 2.第二次掃描時,從剛才選出的根出發,對整棵樹執行一次dfs,在每次遞歸前進行自上向下的推導,計算出換根后的解。 例題POJ3585 Accumulation ...
淺談換根DP 本篇隨筆淺談一下算法競賽中的換根DP。 換根DP概念 換根DP其實是樹形DP的一種延伸技巧或者說是方法。 它的使用范圍是,對樹上的每個點跑樹形DP。這樣的話,不用換根DP一點一點跑的復雜度就是\(O(n^2)\),必炸。那么換根DP應運而生。簡單來講,就是我們會通過推理 ...
今天打 \(Atcoder\) 時遇到了一道換根 \(DP\) ,發現自己不太會,學習了一下。 一般來說,這類題在做樹形 \(DP\) 時沒有固定的根,可以枚舉根然后做 \(N\) 次樹形 \(DP\) ,但復雜度是不太優的,於是有了換根 \(DP\),一般通過兩次對整棵樹的 \(dfs ...
很典型的樹形DP,自己也理解了好久,感覺自己好水哦。。。。。。。。。。。。。。。。。。。。。。。。。 所以講得清楚一點,以后回憶起來也快 題意:一顆樹,n個點(1-n),n-1條邊,每個點上有一個權值,求從1出發,走V步,最多能遍歷到的權值 我們把背包的思想用到這里來,做的步數相當於背包 ...
換根dp 一般來說,我們做題的樹都是默認 \(1\) 為根的。但是有些題目需要計算以每個節點為根時的內容。 朴素的暴力:以每個點 \(u\) 作為 \(root\) 暴力dfs下去,復雜度\(O(n^2)\); 正確的做法:換根dp,復雜度\(O(n)\)。 執行步驟 第一次掃描,先 ...
傳送門 題意 給一顆樹,指定一個點,從這個點開始染色,每次只能在已染色點旁邊染色,問從每個點開始染色分別能產生多少種染色序列。 題解 這個問題其實就是問一顆有根樹的拓撲序列個數。 其實我們知道不是樹的有向無環圖的拓撲序列個數是個np問題,但是樹的拓撲序列個數是一個可解的問題。\(n ...
更新中... http://poj.org/problem?id=1037 dp[i][j][0]表示序列長度為i,以j開始並且前兩位下降的合法序列數目; dp[i][j][1]表示序列長度為i, 以j開始並且前兩位上升的合法序列數目; 於是我們可以得到遞推方程式:dp[i][j ...
鏈接: http://poj.org/problem?id=2282 題意: 給你一個區間a,b,問a到b之間每個數字出現了多少次 題解: 看過算法設計與分析的人都很熟悉這道題,畢竟是課后練習的第一道,感覺用數位dp比模擬更好理解啊 dp[pos][sta]表示到從最低位到第pos位 ...