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