BZOJ-3626:LCA(離線+樹鏈剖分)
阿新 • • 發佈:2018-07-06
dep bzoj inpu 轉化 輸出 深度 定義 區間 三元組
0
0
1
1
1 4 3
1 4 2
5
Description
給出一個n個節點的有根樹(編號為0到n-1,根節點為0)。一個點的深度定義為這個節點到根的距離+1。
設dep[i]表示點i的深度,LCA(i,j)表示i與j的最近公共祖先。
有q次詢問,每次詢問給出l r z,求sigma_{l<=i<=r}dep[LCA(i,z)]。
(即,求在[l,r]區間內的每個節點i與z的最近公共祖先的深度之和)
Input
第一行2個整數n q。
接下來n-1行,分別表示點1到點n-1的父節點編號。
接下來q行,每行3個整數l r z。
Output
輸出q行,每行表示一個詢問的答案。每個答案對201314取模輸出
Sample Input
5 20
0
1
1
1 4 3
1 4 2
Sample Output
85
HINT
共5組數據,n與q的規模分別為10000,20000,30000,40000,50000。
思路:發現很難做,轉化為差分。每個詢問[x,y]與z的LCA和拆分兩個三元組(x-1,z,-1)和(y,z,1);我們從1到N加點,每加一個點,就把它到根的值++,然後回答對應的三元組,累加到三元組對應的答案裏去。比如加點到[1,i],如果有三元組(i,x,1),那麽就用累加x到根的權值,用樹剖即可。
BZOJ-3626:LCA(離線+樹鏈剖分)