傳送門
明顯是求公共祖先,所以我們可以採用傳統的lca
lcalc
a演算法對於深度和寬度,我們在預處理就已經解決了,其他都是普通的lca
lcalc
a演算法
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define ch cheap
using namespace std;
inline ll read()
while
(s>=
'0'&&s<=
'9')
return d*f;
}int
max(
int x,
int y)
intmin
(int x,
int y)
int n=
read()
;int ls[
250]
,cnt=0;
struct nodee[
205]
;void
add(
int a,
int b)
; ls[a]
=cnt++
;return;}
int p[
105][15
],d[
105]
,md=0;
void
dfs(
int now,
int f)
intlca
(int u,
int v)
if(u==v)
return u;
for(
int i=
10;i>=
0;i--
)return p[u][0
];}int c[15]
,mc=0;
intmain()
dfs(1,
0);for
(int i=
1;i<=n;i++
) c[d[i]]++
;for
(int i=
1;i<=md;i++
) mc=
max(mc,c[i]);
printf
("%d\n%d\n"
,md,mc)
;int u=
read()
,v=read()
;int king_power=
lca(u,v)
;printf
("%d"
,(d[u]
-d[king_power])*
2+d[v]
-d[king_power]);
return0;
}
洛谷P3884 JLOI2009 二叉樹問題
題目描述 如下圖所示的一棵二叉樹的深度 寬度及結點間距離分別為 深度 4 寬度 4 同一層最多結點個數 結點間距離 為8 3 2 2 8 為3 1 2 1 3 注 結點間距離的定義 由結點向根方向 上行方向 時的邊數 2,與由根向葉結點方向 下行方向 時的邊數之和。輸入輸出格式 輸入格式 輸入檔案第...
洛谷P3261 JLOI2015 城池攻占
不得不說,這道題目是真的難,真不愧它的 省選 noi 的紫色大火題!花了我晚自習前半節課看題解,寫 又花了我半節晚自習調 真的心態 基本上改得和題解完全一樣了我才過了這道題!真的煩。沒事,那接下來我來完全把這道題搞透。part 1 理解題目 至少我一開始不知道為什麼要用左偏樹,甚至我看題解一開始也都...
洛谷P3261 JLOI2015 城池攻占
思路分析 由於這道題的資料範圍是n,m 3e5,所以我們直接輸入乙個模擬乙個是會超時的,但是我們可以在輸入所有的士兵之後把同在乙個節點的士兵一起處理,我們可以考慮建乙個堆,從深度最大的節點開始,維護乙個節點內的士兵的最小戰鬥力值,如果戰鬥力最小的士兵都能存活下來,那麼在堆中的其他士兵一定可以活下來,...