bzoj3730 震波(點分樹 bit)

2021-09-24 18:38:30 字數 1637 閱讀 3508

傳送門

點分樹板題。。。

然而並沒有遇到卡常之類的事。。。

對於分出來的每一層用兩棵bit

bitbi

t動態維護到自己距離不超過k

kk的與到自己點分樹父親距離不超過k

kk的點數。

**:

#include

#define ri register int

using

namespace std;

const

int rlen=

1<<18|

1;inline

chargc(

)inline

intread()

const

int n=

1e5+5;

vector<

int>e[n]

;int n,m,a[n]

;struct bit

inline

void

init

(const

int&k)

inline

void

update

(int x,

const

int&v)

inline

intquery

(int x)

}t1[n]

,t2[n]

;int siz[n]

,hson[n]

,top[n]

,fa[n]

,dep[n]

,all,ms,rt,fa[n]

;bool vis[n]

;void

dfs1

(int p)

}void

dfs2

(int p,

int tp)

inline

intlca

(int x,

int y)

return ret-

2*dep[dep[x]

?x:y];}

void

getroot

(int p,

int fa)

mss=

max(mss,all-siz[p]);

if(mss}int mdp=

0,m***=0;

void

dfs(

int p,

int fa,

int dist,

int anc)

}inline

void

solve

(int p)

}inline

intquery

(int x,

int k)

for(ri t,i=x;fa[i]

;i=fa[i]

)return ret;

}inline

void

update

(int x,

int v)

a[x]

=v;}

intmain()

}for

(ri ans=

0,op,x,y;m;

--m)

case1:

}}return0;

}

BZOJ3730 點分樹 震波

鏈結自己找,bzoj還沒開 也很顯然是點分樹維護,對每個點開兩個樹狀陣列,維護點分樹上子樹之和,然後修改詢問仍然暴力爬樹,詢問也是用兩個樹狀陣列作差消掉當前子樹影響 code include using namespace std inline intread while isdigit ch re...

點分樹 樹狀陣列 BZOJ 3730 震波

線段樹t成翔 只能用vector寫bit 痛苦的回憶啊 思路不難想 先建出點分樹 然後每個點對於他掌管的點的距離與權值建成bit 然後每次查詢就是爬點分樹 這裡有點注意 往樹上爬的時候不能中途break,不會因為有乙個祖先爬不上去就終止,說不定有乙個爺爺比爸爸還近 include include i...

BZOJ3730 震波 動態點分治

include include include include include include define space putchar define enter putchar n using namespace std typedef long long ll template void rea...