HDU4607 最大直徑 樹DP

2021-07-06 05:29:36 字數 687 閱讀 6030

題意是給一棵樹,從乙個點出發走k個點,問最少走幾次邊。

通過一次樹dp求出最大直徑,如果最大直徑能包含k個點就走最大直徑,否則每增加乙個點就需要多走一條邊兩次,那麼答案就不難想了。

#include using namespace std;

#define maxn 511111

#define maxm 1111111

int dp[maxn][2]; //從i出發到葉子節點的最長長度 次長長度

struct node edge[maxm];

int n, m, head[maxn], cnt;

int max; //最長鏈

void add_edge (int from, int to, int i)

void dfs (int u, int father)

else if (dp[v][0]+1 > dp[u][1])

}max = max (dp[u][1]+dp[u][0], max);

}int main ()

max = 0;

memset (dp, 0, sizeof dp);

dfs (1, 0);

int q;

while (m--)

else }}

return 0;

}

hdu 4607 樹形dp 樹的直徑

題目大意 給你n個點,n 1條邊,將圖連成一棵生成樹,問你從任意點為起點,走k k n 個點,至少需要走多少距離 每條邊的距離是1 思路 樹形dp求樹的直徑r a 若k r 1 ans k 1 b 若k r 1,ans r k r 1 2 include include includeusing n...

HDU4607 樹的直徑

樹的直徑的求法,任取一點u為起點,bfs出一條最長路徑,假設此時終點為v,則再次以v為起點,再bfs出一條最長路徑v w。可以得出樹的直徑即為所求。證明略。可以直接bfs或者dfs都行,來發水題 author crazy 石頭 data structure 樹的直徑 created time 201...

樹的直徑 hdu 4607

樹的直徑定義 樹中所有最短路徑的最大值。定義distance a,b 為頂點a與b之間的最短距離。用數學語言表示就是 對於一棵樹 t v,e 彐vx,vy v,v1,v2 v,都有distance v1,v2 distance vx,vy 則把vx到vy的最短路徑稱為樹t的直徑。現在我們來用演算法求...