樹的直徑與樹的重心
樹的直徑
樹的直徑是指樹上的最長簡單路。
直徑的求法:兩遍搜索
任選一點w為起點,對樹進行搜索,找出離w最遠的點u。
以u為起點,再進行搜索,找出離u最遠的點v。
則u到v的路徑長度即為樹的直徑。
----------------------------------------------------------------
樹的重心
樹的重心:
找到一個點,其所有的子樹中最大的子樹節點數最少,那麽這個點就是這棵樹的重心。
刪去重心後,生成的多棵樹盡可能平衡。
樹的重心可以通過簡單的兩次搜索求出,第一遍搜索求出每個結點的子結點數量son[u],第二遍搜索找出使max{son[u],n-son[u]-1}最小的結點。
實際上這兩步操作可以在一次遍歷中解決。
對結點u的每一個兒子v,遞歸的處理v,求出son[v],然後判斷是否是結點數最多的子樹,
處理完所有子結點後,判斷u是否為重心。
樹的直徑與樹的重心
相關推薦
樹的直徑與樹的重心
遍歷 遞歸 處理 長度 樹的直徑 是否 col 節點 最小 樹的直徑 樹的直徑是指樹上的最長簡單路。 直徑的求法:兩遍搜索 任選一點w為起點,對樹進行搜索,找出離w最遠的點u。 以u為起點,再進行搜索,找出離u最遠的點v。 則u到v的路徑長度即為樹的直徑。 ------
樹的直徑與樹的中心
1. 樹的直徑概念:樹中的最長路。求法:兩次深搜或DP。1-兩次深搜:任找一點A為源點,深搜遍歷得到最遠點B,這個最遠點B必定在直徑中(感性想想,以A點為源點找到的最長路後面一段必定屬於樹的直徑的一部分);再以這個最遠點B為源點深搜遍歷求一個最長路,這個最長路即為樹的直
樹講解(2)——樹的輸入,重心,直徑
str 樹的直徑 names n) ostream push main define span one.樹的輸入 1.輸入每個節點父親節點的編號 #include<vector> #include<stdio.h> #include<
BZOJ 2500 幸福的道路(race) 樹上直徑+平衡樹
pri 平衡樹 efi fin eal add -- span names structHeal { priority_queue<int> real; priority_queue<int> stack; void
【Python算法】圖與樹的實現
com 遍歷 alt self. als .com 字典 分享 def 鄰接列表及其類似結構 對於圖結構的實現來說,最直觀的方式之一就是使用鄰接列表。下面我們來實現一個最簡單的:假設現在我們有n個節點,編號分別為0,...,n-1。 然後,每個鄰接列表就是一個數
UESTC 1073 秋實大哥與線段樹 (線段樹)
put tom typedef ram std amp oid 的人 輸出 “學習本無底,前進莫徬徨。” 秋實大哥對一旁玩手機的學弟說道。 秋實大哥是一個愛學習的人,今天他剛剛學習了線段樹這個數據結構。 為了檢驗自己的掌握程度,秋實大哥給自己
決策樹模型與學習《一》
ini 相親 tor ext 測試的 select port RR rand html { } :root { } html { font-size: 14px; background-color: var(--bg-color); color: var(--tex
ST表與樹狀數組
read pac \n inf bsp ++ add tro pri ST表 st表可以解決區間最值的問題。可以做到O(nlogn)預處理 ,O(1)查詢,但是不支持修改。 st表的大概思路就是用st[i][j]來表示從i開始的2的j次方個樹中的最值,查詢時就從
線段樹與樹狀數組的綜合運用
兩個 遇到 省選 情況 莫隊 erl lib 答案 rmq 前言:線段樹樹狀數組是高級數據結構最基本的部分,數據結構又是省選最基本的部分,所以從他開始整理一下。 題目以洛谷和bz為基底 1.基礎運用 數據結構最基本的問題就是操作和詢問的問題, 修改可以分為點修改(包括點的函
Python算法教程第二章知識點:計時模塊、字典與散哈希表、圖與樹的實現、成員查詢、插入對象
復雜度 代碼段 程序 ans 數列 imp val 插入對象 string 本文目錄:一、計時模塊;二、字典與散哈希表;三、圖與樹的實現;四、成員查詢;五、插入對象</br>一、計時模塊(timeit、cProfile) import timeit timeit
[SDOI2013]直徑(樹的直徑)
str 學習 sin clas long long ont tro 給定 pac [SDOI2013]直徑 題目描述 小Q最近學習了一些圖論知識。根據課本,有如下定義。樹:無回路且連通的無向圖,每條邊都有正整數的權值來表示其長度。如果一棵樹有N個節點,可以證明其有且僅有N-
B-樹 動機與結構
總量 越來越大 b-樹 避免 dos 原理 存儲 組成 重要 Ps.我們遵循從感性到理性的認知順序來逐步探索B-樹的奧秘,之前經常說的value這裏用key(關鍵碼)指代,因為可能存的是字符串,說是value就不合適了。 (多圖預警!!!建議在WI-FI下觀看) 雖然迄今
淺談MySQL的B樹索引與索引優化
成本 情況 但是 數據行 eat bst tree bfs 優化 前言 MySQL的MyISAM、InnoDB引擎默認均使用B+樹索引(查詢時都顯示為“BTREE”),本文討論兩個問題: 為什麽MySQL等主流數據庫選擇B+樹的索引結構? 如何基於索引結構,理解常見的MyS
CF EDU 46E We Need More Bosses 邊雙縮點,樹直徑
題意:n點m條邊的無向圖,初始聯通,定義(s,t)的價值為:有多少條邊e,滿足刪除邊e後,s無法到達t ? 2<=n<=3e5, n-1<=m<=3e5. 問所有(s,t)中的最大價值為多少? 若(s,t) 為同一個環上的點,那麼顯然沒有滿足條件的e. 所以先邊雙聯通縮點
NOIP複賽複習(八)STL演算法與樹結構模板
STL演算法 STL 演算法是一些模板函式,提供了相當多的有用演算法和操作,從簡單如for_each(遍歷)到複雜如stable_sort(穩定排序),標頭檔案是:#include <algorithm>。常用STL 演算法庫包括:sort快速排序演算法、二分
資料結構——3.1樹與樹的表示
一、引言 層次結構舉例 家譜、城市(鄉鎮),檔案管理系統等 為什麼用層次結構呢? 分層次組織在管理上具有更高的效率 查詢 靜態查詢:對查詢的集合沒有插入和刪除操作,只有查詢 動態查詢:對查詢的集合除查詢外,還可能發生插入和刪除 二分查詢的啟示 例如11個元素的二
二叉樹認識與程式設計實現
歡迎瀏覽我的個人部落格 轉載請註明出處 https://pushy.site 1. 樹 我們都知道,樹是一種一對多的資料結構,它是由n個有限節點組成的一個具有層次關係的集合,它有如下的特點: 根節點是唯一的(老大當然是一個~); 每個節點都有零個或者必須多個子節點(丁克、獨生子、雙胞
裝置樹編譯與反彙編
轉載地址:https://blog.csdn.net/fight_onlyfor_you/article/details/74059029 1.編譯最新的核心 第一步 tar -xvf .........解壓核心 第二步 mak
樹的DFS序列,時間戳,樹的深度,重心
ACM題集:https://blog.csdn.net/weixin_39778570/article/details/83187443 樹的DFS序,時間戳 /*樹的DFS序*/ #include<bits/stdc++.h> #define ll l
基於python的 樹型資料結構,二叉樹使用與AVL樹使用
樹由n個節點組成的集合,可以遞迴定義資料結構,如果n=0就是空樹 如果n>那麼有樹 概念 根節點、葉子節點 樹的深度(高度) 樹的度 孩子節點、父節點 子樹 二叉樹-遍歷 # 樹型圖示意 E