1. 程式人生 > 其它 >20220222省選組總結

20220222省選組總結

T1

不會暴力怎麼打是我的問題QAQ
總歸打了個水法20pts。
暴力是對於每個格有兩種刪法,確定了哪種後在它之前必要刪除的格子和刪法就都確定了,這時 \(O(n^4)\) 的,35pts。
然而會了暴力怎麼就不會滿分呢???
每個點有兩種刪法,左或右,一個先刪左的格子,它左邊的格也一定是先刪左的。
於是左右兩種方向做,繼承前一個格子刪的點,複雜度就是 \(O(n^3)\) 的了。

T2

對於一顆生成樹,每個點的度數是 \(d_i\) ,它的貢獻就是

\[\prod_{i=1}^n d_i \prod _{i=1}^n w_i^{d_i} \]

所以我們對每個點分別考慮,又結合Prufer序列相關知識,
Prufer 序列與生成樹一一對應,每個點的度數則為 序列中出現次數+1,序列總長度為 \(n-2\)


設點 \(i\) 的 EGF 為 \(F_{i}(x)\) ,則

\[F_i (x)= \sum_{k \ge 0} \frac{w_i^k x^k (k+1)}{k!}=e^{w_ix}(w_ix+1) \]

那麼答案就是

\[\begin{align*} Ans&= \left[ \frac{x^{n-2}}{(n-2)!} \right] \prod_{k=1}^n w_i \prod_{k=1}^n F_i(x)\\ &= \left[ \frac{x^{n-2}}{(n-2)!} \right] {\Large e}^{\sum_{k=1}^n w_i x} \prod_{k=1}^n w_i \prod_{k=1}^n (w_i x+1) \end{align*} \]

這裡前兩個可以預處理,最後一個揹包做,最後暴力算答案。
複雜度 \(O(n^2)\)

T3

子任務:可以對整個序列維護一個大根堆,每次加入一個數,彈出堆頂元素。

由此可以很自然地得出分塊的做法。
對每個塊維護同樣的一個堆,並記錄每次加入的數。
整塊情況直接做即可,散塊需要將前面的記錄先結算,此時直接暴力複雜度會退化,注意到壽司和人實際上地位相當,每個數會被修改為經過它的數中最小值,對加入的數維護一個小根堆,從 \(l\)\(r\) 列舉 \(a_i\) ,將 \(a_i\) 對比並對調。

其實題目就做完了。。。但是卡常挺悲哀的QwQ
注意不要直接對所有塊維護小根堆,而是先用 vector 記錄下來,在需要維護整塊資訊(修改散塊前)時用建構函式將 vector 轉成 priority_queue ,原因是 push() 比 push_back() 要慢得多。