vijos1476 旅遊規劃 動態規劃

2021-08-01 17:05:37 字數 830 閱讀 3894

傳送門

題解:我是這麼做的,首先第一遍求出每個點向下的不相交的最長鏈和次長鏈,

這樣兩條鏈拼起來就是就是過這個點(不包含他的父親的情況下)的最長鏈。

在這些最長鏈中取max就可以得到直徑。

然後乙個點在直徑上,要麼他本身就在已經求出的最長鏈上(就是從這個點出發的最長+次長鏈=直徑長度),

要麼如果這個點在某一條直徑的某條鏈上(即這個點向父親方向延伸的最長+這個點向下的最長=直徑長度)

事實上還是要在已經求出的最長、次長和向父鏈上找兩條最長的拼起來看是不是直徑。

只不過最長肯定不會比次長短所以向父+次長就不用試了。

關於向父鏈的求法,假設x的某個兒子y,x的向父鏈為px,則

若y在x的最長鏈上,那麼py=max(px,x的次長鏈)+1

否則y不在x的最長鏈上,py=max(px,x的最長鏈)+1.

最後用ans記錄答案排個序即可。注意下標是從0~(n-1)不要寫錯。

//vijos 1476

#include#include#include#include#include#define maxn 200010

using namespace std;

vectorg[maxn];int ans[maxn],cnt;

int len1[maxn],len2[maxn],maxlen;

int firdfs(int rt,int fa)

return 0;

}int getdp(int rt,int fa,int flen)

}int main()

{ int n;scanf("%d",&n);

for(int i=1;i

mysql動態規劃 動態規劃

動態規劃 能夠動態規劃的問題具有以下特點 可分解成規模更小的子問題 子問題的結果可復用 關鍵是要理解狀態轉移方程的含義就好啦!數字三角形 問題描述 在數字三角形尋找從頂到底的路徑,使得路徑經過的數字之和最大。規定每一步只能往左下或右下走,求出最大路徑和。遞迴解法 include include us...

hrb 1476 動態規劃

題意 n個單詞,每行字元數量m個,單行字元數量值為j時,花費我 m j 3 單詞間有乙個空格,問最小花費。最後一行不花費 解法dp i j 表示前i個單詞,長度為j的最小花費 最後一行多餘空格不作為計算,只有出現換行時才計算。dp i j 表示前i個單詞,長度為j的最小整齊度 由 dp i j 通過...

旅遊預算 動態規劃

2 問題描述 乙個旅行社需要估算乘汽車從某城市到另一城市的最小費用,沿路有若干加油站,每個加油站收費不一定相同。旅遊預算有如下規則 若油箱的油過半,不停車加油,除非油箱中的油不可支援到下一站 每次加油時都加滿 在乙個加油站加油時,司機要花費2元買東西吃 司機不必為其他意外情況而準備額外的油 汽車開出...