Problem A. P5314 [Ynoi2011] ODT
題意:
給定一棵樹,樹有點權,要求支援路徑加,查詢一個點的距離小於等於 \(1\) 的鄰域的 \(k\) 小點權。
\(1 \leq n, m \leq 10^6\),\(3\) 秒,\(500\) MB。
解法:
小清新樹剖題。
對於這類看似無從下手的樹上問題,考慮樹剖可能是一個很好的手段。
先將路徑加改為到根路徑加,樹剖的很好性質是到根路徑總會被分為 \(O(\log n)\) 條重鏈。於是一個自然的想法就出來了。對於每個點使用平衡樹維護除了其重兒子和父親外的點權。詢問時重新插入即可。現在到根路徑加只需要在輕重鏈改變時重構一下。同時要維護路徑加單點求值,用樹狀陣列維護即可。總複雜度 \(O(n \log^2 n)\),可以透過。
Problem B. P5311 [Ynoi2011] 成都七中
題意: