好题璇姐
1. 最小限定度数生成树
Codechef题面 GF题面
简要题意:给定一张带权无向图,保证 1 向其它点都有边,且去掉 1 后剩下的图联通。对 \(k\in[1,n-1]\) 求点 1 度数为 \(k\) 时的最小生成树权值和。\(n,m\le 3\times 10^5\)。
思路:
- 先从 1 向所有其它点都有边开始考虑。假设我们已经知道按什么顺序加边了,那么每次我们会删掉哪条连向 1 的边呢?是当前这条边所在左右两个连通块 \(A,B\) 中权值最小的点 \(min_A,min_B\) 的较大值。于是我们加这么一条边对整棵生成树的权值和的影响是增加了 \(w_e-\max(min_A,min_B)\),称之为这条边的“价值”。(为什么是 \(min\)?因为更大的1边一定已经删掉了)
又由 定理2 得知,每次贪心选价值最小的边就是最优解。现在我们只要能迅速算出每条边的价值即可。 - 有一个发现:当连接所有 \(w\le w_e\) 的边时,\(\max(min_A,min_B)\) 即为最终的 \(\max(min_A,min_B)\)。
证明:一方面,设取到 \(min_A\) 的点为 \(u\),取到 \(min_B\) 的点为 \(v\),则 \(e\) 一定是路径 \((u,v)\) 上权值最大的边(否则肯定不会删它)。于是 \(u,v\) 一定都已经连上了。
另一方面,如果连着一个 \(ww(v_0)<ww(v)\),那么由原来的“加上 \(e\) 删掉 \(v\)”改为“删掉 \(e_0\) 加上 \(v_0\)”(其中 \(e_0\) 是通往 \(v_0\) 的一条边),由于 \(w_{e_0}\le w_e,ww(v_0)<ww(v)\),显然后者更优,矛盾。
于是就按 \(w\) 从小到大连,维护连通块最小值,排个序就做完了。
2. 全排列逆序对 \(k\) 次方和
PTZ题面 QOJ题面
设 \(F_t(z)=\sum\limits_{i=0}^{t-1}z^t\),则令 \(G=\prod\limits_{t=1}^n F_t\),答案即为 \(\sum i^kg_k\)。
接下来,是一系列神奇而经典的操作。
首先,考虑改为算期望,由于 \(k\) 次方可以转为若干个组合数之和,所以组合意义为若干种选 \(2k\) 个位置的方案数,于是答案为关于 \(n\) 的 \(2k\) 次方多项式;
然后,\(i^k\) 很恶心,变成下降幂,导数就出来了:
接着,运用莱布尼茨公式:
再接着,小学奥数:
最后,对 \(n!\) 分段打表,就做完了。
3. 图上动态点亮边数问题
(\(\texttt{From} \color{black} \texttt{ w} \color{red} \texttt{lxhkk}\))
题意: 给一张 \(n\) 个点 \(m\) 条边的图,每次操作会改变一个点的点亮状态,并询问有几条边满足其两个端点都被点亮。\(n,m\le 10^5\)。
考虑根号分治。发现度数大于 \(\sqrt{m}\) 的点最多只有 \(O(\sqrt{m})\) 个,这是一个很重要的性质。
称度数大于 \(\sqrt{m}\) 的点为大点,其余的点为小点。
当修改小点时,由于其度数不超过 \(\sqrt{m}\),可以暴力修改。
当修改大点时,贡献分为两种:小点对大点的贡献,以及大点对大点的贡献。
对于前者来说,大点不好维护,所以考虑让小点贡献到大点上面,即每个小点的点亮情况贡献到其周围的大点,每个大点维护一个 cnt
即可。
对于后者来说,由于大点最多只有 \(O(\sqrt{m})\) 个, 所以可以直接暴力枚举大点进行更新。
总共的复杂度就 \(O(n\sqrt{m})\)。