DS 合集

HappyBobb發表於2024-10-07

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] 成都七中

題意: