1. 程式人生 > >【BZOJ4771】七彩樹

【BZOJ4771】七彩樹

離線 有用 掃描 col 如果 超級 不能 不同 問題

題解:

首先扯一些並沒有用的

如果問題是在序列上的怎麽做

跟bzoj那道超級鋼琴的加強版要求數字不同那個原理一樣

主席樹掃描過去 找到同一種顏色的前驅 這一段+1就可以了

擴展到樹上

如果求鏈上的顏色個數,套上樹剖和序列就一樣了

另外找前驅在樹上是不能用一個數組記錄的

所以也得用主席樹實現(維護每個顏色上一次出現的位置)

另外如果是查詢子樹顏色個數在線

我們可以用dfs序把樹變序列

然後跟上面一樣

如果離線

直接線段樹啟發式合並

然後回到這道題。。

上面的方法應該一個都不行(至少我不會)

不過正解也是很簡單的

既然考慮每個點的子樹不可行

我們可以考慮每個點對哪些點的子樹有貢獻

於是算法就出來了我們可以對每個點分開做

然後樹鏈求並(我好像只會用虛樹來求)

現在這題加了一個限制

線段樹修改改成主席樹就好了

【BZOJ4771】七彩樹