樹鏈剖分學習

2021-06-25 21:56:53 字數 682 閱讀 1256

樹鏈剖分

看了學習了樹鏈剖分

適用於在樹上的路徑操作。

關鍵在於重鏈的構造,把它表示到了資料結構上的連續區間,降低了複雜度。

主要操作步驟實際上有三個部分

1: 構造重鏈

2: 如何維護資料

3: 分解為輕重鏈的查詢與修改

#include #include #include #include #define n 10010

using namespace std;

struct nodek[n*2];

int now;

int num;

int son[n],_hash[n],deep[n],head[n],fa[n],sum[n],top[n];

void add(int x,int y,int w)

int dfs(int x,int f)

return ;

}void build_tree(int x,int f)

return ;

}void modify(int x,int y,int z)

l=_hash[x],r=_hash[y];

if(l>r)swap(l,r);

//修改l,r

}

hdu5029 ( relief grain )

樹鏈剖分學習

之前寫過樹剖的題,但沒有完全理解,現在又無法複述思路了,所以重新學習一下,部分語句參考大神的敘述 一 概念 樹鏈剖分,顧名思義,樹是由一根根樹鏈組成的,我們現在要來把它按鏈來分解掉。我們知道,大部分樹上的問題都是圍繞樹的路徑來做文章,分解成一條條的鏈之後,我們就可以對節點 邊 就行編號了,而同一根鏈...

樹鏈剖分學習

樹鏈剖分其實就是把一棵樹剖分成一條條鏈 重鏈輕鏈 然後用線段樹進行操作維護。複雜度logn 記錄 deep size fa pos bl 陣列 deep深度,size子樹節點個數,pos節點編號,bl所在重鏈頂端節點編號,fa父親編號。例題 bzoj1036 include define inf 1...

樹鏈剖分學習

兩次dfs,第一次處理處fa,depth,size,son,第二次處理出top,rank,id 一條重鏈的編號是連續的,可以用資料結構維護,做事情的時候判斷是否在同一條鏈上,不是就把最深的跳到鏈頭的fa,然後繼續判斷 luogu3384 模板 樹鏈剖分 區間加,求和,子樹加,求和 include i...