例題 (模板題):
**:
#include #include#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=100000+50
;int n,deep[maxn],h[maxn],f[maxn][20
],q,cnt;
struct
node
table[maxn];
struct
nodee
tree[maxn];
void add(int x,int y) //
先儲存邊 (例題為例,先儲存無向關係)
void dfs(int x,int deepx) //
將不確定的無向邊變成父子關係 ,並完成倍增的初始化
}int query(int x,int
y)int
main()
for (int i=1,q1,q2; ii)
dfs(
1,1);
scanf("%d
",&q);
for (int i=1,q1,q2; i<=q; ++i)
return0;
}
樹的基礎內容
倍增LCA模板
注意!本篇題解不適合初學lca的同學學習,因為我講的很爛很不清楚。倍增,顧名思義,就是成倍增加的意思。我們知道,任何乙個數字都可以表示成二進位制。那麼對於一條長度為n的鏈,我們總是可以跳大概logn次到達最後。對於鏈上任意一點,我們都可以在大概logn的複雜度下詢問到,其實倍增的思路就是二分,和快速...
LCA倍增法模板
deg其實應該寫成depth吧,存的是每個結點的深度,dfs的過程是為了處理出每個結點的深度,用遞推式計算出fa u i 其中f u i 表示u的第2 i個祖先 基本思想是 d i 表示 i節點的深度,p i,j 表示 i 的 2 j 倍祖先 那麼就有乙個遞推式子 p i,j p p i,j 1 j...
lca倍增演算法模板
時間限制 1 sec 記憶體限制 128 mb 提交 244 解決 36 提交 狀態 給一棵樹,節點數為n 1 n 250,000 和q 0 q 100,000 個詢問,對於每個詢問求出所求兩點的最近公共祖先 第一行 節點數n 以下n行,第i 1行 點i的父親節點father i 假定根的父親是0 ...