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

2021-10-24 07:53:25 字數 1278 閱讀 5752

鏈結 :a - 巨木之森

題意:

每支小隊從每個點出發 ,遍歷完整顆樹的花費是走過路徑的和,要求在花費 m 以內,最多可以有多少個小隊遍歷完整顆樹。

思路:

可以求出每個點遍歷整棵樹的花費 ,排個序,從小到**就好了,關鍵在於求花費。

可以發現,要想遍歷完整顆樹,再回到原來的位置,那麼就要把每條邊都走兩遍,但是現在不需要回到原來的位置,所以只要找到離根節點最遠的點,用總權值的兩倍減去 這條最遠邊的長度就好了。

根據樹的乙個性質,離某個點最遠的點一定是樹直徑兩端點中的乙個,所以我們只要求出樹的直徑的兩個端點,然後得到其他點到這兩個點的距離就好了。

**:

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e6+7;

int head[maxn]

,num,n,ans,pos;

ll sum,w,dis[maxn][2

],val[maxn]

,m;struct nodee[maxn]

;void

add(ll u,ll v,ll w)

void

dfs(

int u,

int pre,

int id)

}int

main()

pos =1;

dfs(1,

-1,0

);dis[pos][0

]=0;

dfs(pos,-1

,0);

dfs(pos,-1

,1);

for(

int i =

1; i <= n; i++

)sort

(val +

1,val + n +1)

; ll res =0;

for(

int i =

1; i <= n; i++

)else

break;}

printf (

"%d\n"

,ans)

;}

巨木之森(樹的路徑,貪心)

巨木之森 給定一棵n nn個結點的樹,m mm塊錢。定義花費為從乙個點出發遍歷整棵樹所經過的路徑和。求最多能選擇多少個不同的起點使得花費總和 m leq m m。n 1 05,m 1018 wi 10 8n leq 10 5,m leq 10 w i leq 10 8 n 105,m 10 18,w...

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

題解 尤拉路 從圖中任意乙個點開始到圖中任意乙個點結束的路徑,並且圖中每條邊只通過恰好一次 問你走完這樹上所有的點最短路徑是什麼。因為樹是沒有環的,所以你走到葉子結點的時候需要往回走,也就是再走一遍剛剛走過的路。所以我們確定一條主道路,遇到分支就走一遍 主道路是不需要走兩遍的 因為所有長度都是已知的...

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

樹的直徑 牛客網 題目描述 給定一棵樹,求出這棵樹的直徑,即樹上最遠兩點的距離。示例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先遍歷樹,構建乙個無向圖 後序遍歷更新樹...