題意中的兩點距離需要稍微思考一下,很容易想到 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...