小A與尤拉路(牛客 樹的直徑)

2021-10-10 10:03:52 字數 1221 閱讀 1080

題解:

尤拉路:從圖中任意乙個點開始到圖中任意乙個點結束的路徑,並且圖中每條邊只通過恰好一次

問你走完這樹上所有的點最短路徑是什麼。

因為樹是沒有環的,所以你走到葉子結點的時候需要往回走,也就是再走一遍剛剛走過的路。

所以我們確定一條主道路,遇到分支就走一遍(主道路是不需要走兩遍的)。

因為所有長度都是已知的,所以最短路徑也就是盡量讓這一條主路變長。

想一想最長的一條主路,那不就是樹的直徑嗎。

用所有路徑長度*2-樹的直徑即為答案。

兩次dfs求樹的直徑

/*keep on going never give up*/

//#pragma gcc optimize(3,"ofast","inline")

#include

#define int long long

#define endl '\n'

#define accepted 0

#define ak main()

#define i_can signed

using

namespace std;

const

int maxn =

2e5+10;

const

int maxn =

0x3f3f3f3f

;const

int minn =

0xc0c0c00c

;typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const ll mod=

1e9+7;

vectorint,

int>

> edge[maxn]

;int ans,sum,node;

bool visited[maxn]

;void

dfs(

int x,

int fa,

int now)

for(

auto i:edge[x])}

}signed

main()

dfs(1,

-1,0

);dfs(node,-1

,0);

cout

}

小a與尤拉迴路(樹的直徑的求法)

題目鏈結 這道題是一點思路都沒有,看了別人的題解後,知道了答案其實是 ans 樹的總權值 2 樹的直徑 首先,易知每個邊最多複製兩遍。思考後,可知,我們先假定每個邊都複製了兩遍,於是得到 樹的總權值 2 顯然,我們算多了。於是我們考慮減去某些邊,這裡我們可以將樹看作乙個帶有支路的一條主幹道 這時我們...

牛客網 高頻面試題 樹的直徑

樹的直徑 牛客網 題目描述 給定一棵樹,求出這棵樹的直徑,即樹上最遠兩點的距離。示例1的樹如下圖所示。其中4到5之間的路徑最長,是樹的直徑,距離為5 2 4 11 示例1輸入 複製6,0,1 1,5 1,2 2,3 2,4 3,4,2,1,5 返回值複製 11先遍歷樹,構建乙個無向圖 後序遍歷更新樹...

牛客 6874 A 巨木之森 (樹的直徑)

鏈結 a 巨木之森 題意 每支小隊從每個點出發 遍歷完整顆樹的花費是走過路徑的和,要求在花費 m 以內,最多可以有多少個小隊遍歷完整顆樹。思路 可以求出每個點遍歷整棵樹的花費 排個序,從小到 就好了,關鍵在於求花費。可以發現,要想遍歷完整顆樹,再回到原來的位置,那麼就要把每條邊都走兩遍,但是現在不需...