鏈結 :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先遍歷樹,構建乙個無向圖 後序遍歷更新樹...