這題難的不是樹狀數(shù)組(其實(shí)樹狀數(shù)組很簡單),主要是映射到樹狀數(shù)組。對樹和圖還不熟啊,導(dǎo)致這題就是借了別人的思路,可以用鄰接表建樹,
然后dfs一次就可以算出對某個節(jié)點(diǎn)它的第一個下標(biāo)(在樹狀數(shù)組中)和最后一個下標(biāo)。
那個更改的時候就用這兩個下標(biāo)就行了。
比如下面的樣例
1 2
2 5
1 3
2 4
那么dfs一次之后,就會得到如下坐標(biāo)(1,5)(3,5)(2,2)(5,5)(4,4)(建圖不一樣的話,后面對應(yīng)出來的坐標(biāo)會不一樣,每一對表示樣例中的數(shù)的第一個
下標(biāo)和最后一個下標(biāo)),也就是說從1開始,那么第一個就是1,最后一個是5(這個5不是節(jié)點(diǎn)5,而是節(jié)點(diǎn)4,但是第5個被訪問,其實(shí)第幾個訪問沒關(guān)系的,
我們只是要一個區(qū)間而已,這個區(qū)間代表包含了這棵樹(或者子樹)),那么和它有關(guān)的就是[1,5],對于2這個點(diǎn)它在樹中是第3個訪問的(2個是節(jié)點(diǎn)3)
那么2的第一個下標(biāo)就是3,在這個子樹中最后一個訪問的還是5,所以和它有關(guān)的區(qū)間就是[3,5].同理可以得到其他幾個點(diǎn)所對應(yīng)的坐標(biāo),不過中間可能不
怎么好想,我是這么理解的,對每一個點(diǎn)找出影響它的所有點(diǎn)然后放在一個區(qū)間中,那么改變時就好辦了,而放在一個區(qū)間中,就可以用dfs了。
代碼如下(如果對圖理解的好的話,建議自己先寫)
CODE