HDU 2196 經典樹形DP

2022-04-09 22:58:17 字數 593 閱讀 9303

大體思路是將乙個無根數轉化為有根樹,再深搜兩次,第一次將每個子樹的根距其葉子的最遠距離求出來(自下而上),第二次求每個節點到其他結點的最遠距離(自上而下),但因為在第二次深蒐時可能會碰到乙個結點的父節點的最遠距離經過它,所以我們需要儲存乙個最長距離和乙個次長距離

#include #include #include #include #include using namespace std;

#define maxn 10010

int dp[maxn][2];

int len[maxn];

vectortree[maxn];

void first_dfs(int src)

}void second_dfs(int src)

}int main()

memset(dp,0,sizeof(dp));

int a;

for(int i = 2;i<=n;++i)

first_dfs(1);

second_dfs(1);

for(int i = 1;i<=n;++i)

}return 0;

}

HDU 2196 樹形DP經典題

經典的樹形dp題。題意是求樹中每個點到所有葉子節點的距離的最大值是多少。由於對於乙個節點來說,可能得到的距離最大的值的路徑來自他的子樹,或者從他的父節點過來,所以用兩次dfs。第一次dfs求出所有節點在他的子樹範圍內到葉子節點距離的最大值和第二大的值,第二次dfs更新從父節點過來的情況就可以了。因為...

HDU 2196 樹形dp入門

鏈結 傳送門 題意 給你乙個n個節點的棵樹,然後給你和 第i臺電腦與第a臺電腦相連的花費 v 問你最長的線路是多長 求樹上任意節點所能達到的最遠點的距離 樹形dp 開個陣列 分別記錄這個點到子樹最遠節點的最長距離和次長距離和記錄到父節點上的最長距離這樣在樹上dp 1.求子樹最長和次長 dp u 0 ...

題解 hdu2196 樹形DP

題目鏈結 分析 求乙個樹中所有節點能到達的最遠距離f i 要用兩個dfs。首先第乙個dfs求出所有每個節點i在其子樹中的正向最大距離和正向次大距離和dist i 0 和dist i 1 如果i節點在子樹中最大距離經過了2號兒子,那麼次大距離就是不經過2號兒子的最大距離 並且還要標記longest i...