其他分享
首页 > 其他分享> > 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() 要慢得多。

标签:总结,每个,复杂度,20220222,删法,序列,省选组,prod,暴力
来源: https://www.cnblogs.com/Kelvin2005/p/15924895.html