hiho 1050 樹中的最長路 樹的直徑

2022-08-05 00:21:24 字數 1894 閱讀 1076

最近在複習比較簡單的知識,順便當整理**吧。

樹的直徑是乙個經典問題,即求樹上最遠兩點的距離。

思路一:

任取乙個點,求這個點的最遠點的最遠點,兩遍bfs即可。

**:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include 11 #include 12 #include

13 #include 14 #include 15 #include 16

17using

namespace

std;

1819

const

int inf = 1

<<30;20

21struct

graph

3233 inline void addedge(int u, int

v) 38

};39

40const

int maxn = (int) 1e5+55;41

42graph g;

43int

que[maxn];

44int

d[maxn];

45int

n;46

47void bfs(int

st) 60}

61}6263

void

solve()

6869

intmain()

82solve();83}

8485

return0;

86 }

view code

另一種思路是樹形dp,一棵樹中的最長路要麼在子樹中,要麼經過根。列舉每棵子樹的最大深度和次大深度即可。

**:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 

8 #include 9 #include 10 #include 11 #include 12 #include

13 #include 14 #include 15 #include 16

17using

namespace

std;

1819

const

int inf = 1

<<30;20

21struct

graph

3233 inline void addedge(int u, int

v) 38

};39

40graph g;

4142

const

int maxn = (int) 1e5+55;43

44int

dp[maxn];

45int

ans;

4647

int dfs(int u, int pre, int

cnt)

56else

if (t>se) se =t;57}

58 ans = max(ans, max(fi+cnt, fi+se));

59return fi+1;60

}6162int

main()

75 ans = 0

;76 dfs(1, 1, 0

);77 printf("

%d\n

", ans);78}

7980

return0;

81 }

view code

順便說一下,hiho上這個題的資料比較弱,開始我幾個錯誤的**都a了。

hiho 1050 樹中的最長路

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述上回說到,小ho得到了一棵二叉樹玩具,這個玩具是由小球和木棍連線起來的,而在拆拼它的過程中,小ho發現他不僅僅可以拼湊成一棵二叉樹!還可以拼湊成一棵多叉樹 好吧,其實就是更為平常的樹而已。但是不管怎麼說,小ho喜愛的玩具又...

hiho 1050 樹中的最長路

題目大意 給出一棵樹,其中每兩個節點都可以形成乙個路徑 要求路徑中的邊只能走一次 求出所有路徑中的長度最大值。分析 由於樹的任何乙個節點均可以作為根節點,因此dfs時候,選擇1即可。實現 pragma once pragma execution character set utf 8 本檔案為utf...

hiho 1050 樹中的最長路 樹的直徑

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述上回說到,小ho得到了一棵二叉樹玩具,這個玩具是由小球和木棍連線起來的,而在拆拼它的過程中,小ho發現他不僅僅可以拼湊成一棵二叉樹!還可以拼湊成一棵多叉樹 好吧,其實就是更為平常的樹而已。但是不管怎麼說,小ho喜愛的玩具又...