樹的重心
樹的重心是指樹上一點,去掉後最大子樹可以取得最小值的點。
求解方法:
樹的重心定義:去掉該點後最大子樹大小不超過n/2。重心為1
樹的直徑指樹上最遠兩點的距離
方法:先隨便找個點,找到離他最遠的點,再在那個最遠的點上找一次最遠的點,這兩個點之間的距離就是直徑。
**:
#include
#define maxn 100005
using namespace std;
int n, m;
int dep[maxn]
, dis[maxn]
, l =
1, r =0;
int res, ans;
//res為找到的最遠點,ans為直徑
bool vis[maxn]
;struct edge
e[maxn]
;int k =
0, head[maxn]
;void
add(
int u,
int v,
int w)
void
bfs(
int u)}}
}int
main()
bfs(1)
;//隨便乙個點
ans =0;
bfs(res)
;//第二次
printf
("%d\n"
, ans)
;return0;
}
樹的重心 樹的直徑
樹的重心 樹的重心定義為 找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹盡可能平衡.實際上樹的重心在樹的點分治中有重要的作用,可以避免n 2的極端複雜度 從退化鏈的一端出發 保證nlogn的複雜度,利用樹型dp可以很好地求樹的重心.求樹的重心 模...
樹的直徑 樹的重心
樹的直徑 定義 那麼樹上最遠的兩個點,他們之間的距離,就被稱之為樹的直徑。樹的直徑的性質 1.直徑兩端點一定是兩個葉子節點。2.距離任意點最遠的點一定是直徑的乙個端點,這個基於貪心求直徑方法的正確性 可以得出。3.對於兩棵樹,如果第一棵樹直徑兩端點為 u,v 第二棵樹直徑兩端點為 x,y 用條邊將兩...
樹的直徑與重心
樹的直徑,指樹上最長的不重複經過同乙個點的路徑。方法 先從任意一點p pp出發,找離它最遠的點q qq,再從點q qq出發,找離它最遠的點w ww,w ww到q qq的距離就是的直徑 具體實現可以使用兩次dfs dfsdf s。演算法證明 反證法 include using namespace st...