BZOJ 4372 爍爍的遊戲

2022-05-10 22:49:21 字數 2381 閱讀 3096

背景:爍爍很喜歡爬樹,這嚇壞了樹上的皮皮鼠。

題意:給定一顆n個節點的樹,邊權均為1,初始樹上沒有皮皮鼠。

爍爍他每次會跳到乙個節點u,把周圍與他距離不超過d的節點各吸引出w只皮皮鼠。皮皮鼠會被爍爍吸引,所以會一直待在節點上不動。

爍爍很好奇,在當前時刻,節點u有多少個他的好朋友---皮皮鼠。

大意:給一顆n個節點的樹,邊權均為1,初始點權均為0,m次操作:

q x:詢問x的點權。

m x d w:將樹上與節點x距離不超過d的節點的點權均加上w。

第一行兩個正整數:n,m

接下來的n-1行,每行三個正整數u,v,代表u,v之間有一條邊。

接下來的m行,每行給出上述兩種操作中的一種。

對於每個q操作,輸出當前x節點的皮皮鼠數量。

7 61 2

1 41 5

2 32 7

5 6m 1 1 2

q 5m 2 2 3

q 3m 1 2 1

q 2236

和震波哪題很像,也是線段樹+動態點分治

只不過將操作換了,一樣的原理

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define max 120000

8struct

node

9edge[max<<1

];12

intnum,head[max];

13int

dep[max],fa[max],pos,size[max],minsize,root;

14int

fa[max],son[max],top[max],size;

15int lazy[max*150

];16

int ch[max*150][2],rt[max<<1

],n,m;

17int

ans,val[max];

18bool

vis[max];

19 inline int

gi()

2028

while (ch>='

0'&&ch<='9'

)2933return x*flag;34}

35 inline void add(int u,int

v)36

42void dfs1(int x,int

pa)4356}

57void dfs2(int x,int

tp)5868}

69int lca(int x,int

y)70

76if (dep[x]return

x;77

return

y;78}79

int dis(int x,int

y)80

83void get_root(int x,int

pa)84

95if (size-size[x]>ret) ret=size-size[x];

96if (retx;97}

98void solve(int x,int

pa)99

110}

111void update(int &rt,int l,int r,int l,int r,int

w)112

116int mid=(l+r)>>1

;117

if (l<=mid) update(ch[rt][0

],l,mid,l,r,w);

118if (r>mid) update(ch[rt][1],mid+1

,r,l,r,w);

119}

120int query(int rt,int l,int r,int

x)121

129void change(int u,int k,int

w)130

139}

140void ask(int

u)141

149}

150int

main()

151

159 dfs1(1,0

);160 dfs2(1,1

);161 minsize=size=n;

162 get_root(1,0

);163 solve(root,0

);164 ans=0

;165

for (int i=1;i<=m;i++)

166175

else

176180

}181

return0;

182}

183

BZOJ4372 爍爍的遊戲

背景 爍爍很喜歡爬樹,這嚇壞了樹上的皮皮鼠。題意 給定一顆n個節點的樹,邊權均為1,初始樹上沒有皮皮鼠。爍爍他每次會跳到乙個節點u,把周圍與他距離不超過d的節點各吸引出w只皮皮鼠。皮皮鼠會被爍爍吸引,所以會一直待在節點上不動。爍爍很好奇,在當前時刻,節點u有多少個他的好朋友 皮皮鼠。大意 給一顆n個...

BZOJ 4372 爍爍的遊戲 動態點分治

time limit 30 sec memory limit 512 mb submit 804 solved 288 submit status discuss 背景 爍爍很喜歡爬樹,這嚇壞了樹上的皮皮鼠。題意 給定一顆n個節點的樹,邊權均為1,初始樹上沒有皮皮鼠。爍爍他每次會跳到乙個節點u,把周...

BZOJ4372 爍爍的遊戲 動態點分治

題目描述 給一顆n個節點的樹,邊權均為1,初始點權均為0,m次操作 q x 詢問x的點權。m x d w 將樹上與節點x距離不超過d的節點的點權均加上w。n,m 105,w 104 題目分析 每個點分中心維護乙個樹狀陣列記錄對子樹某個距離的加權,再維護乙個記錄點分樹上的父親由自己這棵子樹貢獻上去的加...