題解:
尤拉路:從圖中任意乙個點開始到圖中任意乙個點結束的路徑,並且圖中每條邊只通過恰好一次
問你走完這樹上所有的點最短路徑是什麼。
因為樹是沒有環的,所以你走到葉子結點的時候需要往回走,也就是再走一遍剛剛走過的路。
所以我們確定一條主道路,遇到分支就走一遍(主道路是不需要走兩遍的)。
因為所有長度都是已知的,所以最短路徑也就是盡量讓這一條主路變長。
想一想最長的一條主路,那不就是樹的直徑嗎。
用所有路徑長度*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 以內,最多可以有多少個小隊遍歷完整顆樹。思路 可以求出每個點遍歷整棵樹的花費 排個序,從小到 就好了,關鍵在於求花費。可以發現,要想遍歷完整顆樹,再回到原來的位置,那麼就要把每條邊都走兩遍,但是現在不需...