樹鏈剖分總結

2022-04-30 06:39:10 字數 796 閱讀 3251

把樹剖成鏈再操作

部落格安利:

維護7個不同陣列,通常和線段樹一起使用

1、模板題

p3384 【模板】樹鏈剖分

p3178 [haoi2015]樹上操作

p2590 [zjoi2008]樹的統計

p2146 軟體包管理器

p2420 讓我們異或吧

2、應用題

p3950 部落衝突

p3038 牧草種植

1、線段樹加法進行下放懶標記和打標記時要乘區間長度

if(l>=gl&&r<=gr)

t[now<<1]=(t[now<<1]+lazy[now]*(mid-l+1))%p;

t[now<<1|1]=(t[now<<1|1]+lazy[now]*(r-mid))%p;

這是p3384 模板,當時還請zsy幫忙調了

2、把邊權下放到點權的時候注意臨界情況

if(query(1,1,n,dfn[y]+1,dfn[x]))printf("no\n");
這是p3950 部落衝突,把邊下放到點的時候,對於lca特殊處理,比如說點a和b的lca是k,k上方發生戰爭於是標記在k,但a和b還是聯通的,所以查詢時要忽略k,即+1。

3、注意lazy是非零即放,那麼不要打嘆號

查錯時可以考慮一下

標籤:樹鏈剖分

樹鏈剖分總結

樹鏈剖分思想不是很複雜。首先給出幾個定義吧 其核心思想就是,將一棵樹拆成多條鏈,然後對於每一條鏈,就用資料結構去維護。有個不會證明的性質,就是如果將一顆樹拆成多條重鏈和輕邊,那麼重鏈的個數不會超過 log 2n 輕邊的邊數也不會超過 log 2n 因為這個性質,很多操作我們可以很高效地完成。這個之後...

樹鏈剖分 樹鏈剖分講解

好了,這樣我們就成功解決了對樹上修改查詢邊權或點的問題。下面放上 vector v maxn int size maxn dep maxn val maxn id maxn hson maxn top maxn fa maxn 定義 int edge 1,num 1 struct tree e ma...

模板總結 樹鏈剖分

給定一顆樹,要求對樹上的路徑 u,v 進行高效操作。1 更新路徑 u,v 上所有點的權值,單點查詢樹上某點的權值 2 更新結點u的權值,查詢路徑 u,v 上的權值和 3 更新路徑 u,v 上的權值,查詢路徑 u,v 上的權值和 4 更新結點u的權值,查詢路徑 u,v 上的lcis 5 更新結點u到根...