洛谷 P3884 二叉樹問題

2021-10-08 12:07:38 字數 880 閱讀 8817

題意中的兩點距離需要稍微思考一下,很容易想到 lca

lcalc

a,然後注意一下本題中距離的定義;深度,跑 lca

lcalc

a所需要的dfs已經跑過了每個點的深度;寬度,一開始想用統計子樹的方法,然後發現遞迴可能不太好寫 我寫不出來,突然發現直接桶排一下就行了,而資料也非常適合桶排。

資料較小,所以 lca

lcalc

a中的 i

ii 其實開到8就行,個人寫的9

#include

using

namespace std;

int n;

int dep_max,wid_max;

//儲存

vector<

int> e[

107]

;//存邊

int dep[

107]

,fa[

107][10

];//lca

int tim[

107]

;//桶排陣列,存每種深度出現的次數

void

dfs(

int fro,

int fat)

return;}

intlca

(int x,

int y)

intdis

(int x,

int y)

void

width()

intmain()

dfs(1,

0); cout

;int u,v;cin>>u>>v;

cout<<

dis(u,v)

;return0;

}

洛谷 P3884 JLOI2009 二叉樹問題

傳送門 明顯是求公共祖先,所以我們可以採用傳統的lca lcalc a演算法對於深度和寬度,我們在預處理就已經解決了,其他都是普通的lca lcalc a演算法 include include include include include include include include inclu...

洛谷P3884 JLOI2009 二叉樹問題

題目描述 如下圖所示的一棵二叉樹的深度 寬度及結點間距離分別為 深度 4 寬度 4 同一層最多結點個數 結點間距離 為8 3 2 2 8 為3 1 2 1 3 注 結點間距離的定義 由結點向根方向 上行方向 時的邊數 2,與由根向葉結點方向 下行方向 時的邊數之和。輸入輸出格式 輸入格式 輸入檔案第...

洛谷 新二叉樹(P1305,二叉樹)

輸入一串二叉樹,輸出其前序遍歷。輸入格式 第一行為二叉樹的節點數 n。1 n 26 後面 n 行,每乙個字母為節點,後兩個字母分別為其左右兒子。空節點用 表示 輸出格式 二叉樹的前序遍歷。輸入輸出樣例輸入6 abcbdi cj d i j 輸出abdicj include using namespa...