22
https://www.luogu.com.cn/problem/AT_agc070_b
感觉无敌了。
考虑只有第一个条件怎么做。把 \(2^{cnt}\) 拆成 \((1+1)^{cnt}\),然后就变成钦定若干个环的方案数之和。
考虑只有第一个和第二个条件怎么做。令钦定若干个环的权值是 \((-1)^{偶环数}\),答案就是钦定若干个环的(权值乘方案数)之和。要计算这个,先预处理出系数 \(f_i\) 表示 \(i\) 个点形成若干个环的所有方案的权值和,答案就是 \(\sum f_i\times n^{n-i}\)。打表可以发现 \(f_i=[i\le 1]\)。
考虑三个条件都有怎么做。再在外层套一个容斥,容斥哪些树边被选在了内层容斥的环上。可以发现这些树边一定形成恰好一条祖先链。于是枚举这条链的长度就做完了。
https://www.luogu.com.cn/problem/P11973
可以感受到答案的形式一定是顺时针地进行匹配。
在这种匹配的方式里,相交的线段对数就是每一对匹配的黑白点的距离之和。所以只需要最大化距离之和。
环上距离本身是一个两边取 \(\min\) 的形式,最大化不太好做,考虑把每个白点对称到环上的相对位置,就变成最小化了。环上匹配最小化距离和是一个经典问题,一定有一条边不被计入贡献,于是做完了。
https://www.luogu.com.cn/problem/P6118
这个题好难。
对于每个点,它的独特的城市一定在以它为根的最长链上。这个最长链的端点一定是直径的两个端点之一,所以只要以直径的两个端点为根跑两遍,求出每个点到根的路径上的信息就可以了。
考虑 \(x\) 到根的路径上有哪些点对 \(x\) 来说是独特的。相当于路径上的每个点都会有一个限制,形如深度在某个区间内的点是不独特的。尝试直接在 dfs 的过程中去维护这个东西,然后发现有点完蛋,因为要撤销限制,复杂度均摊下来就不对了。
但是我们发现 \(x\) 对它长子树内的点的限制总是比 \(x\) 对其它子树内的点的限制要弱。所以只要先递归进长儿子,就不需要撤销限制了。
具体来说算法流程如下:
- 将 \(x\) 的父亲入栈;
- 把距离 \(x\) 不超过 \(x\) 的次长链长度的点弹出栈;
- 递归进长儿子;
- 把距离 \(x\) 不超过 \(x\) 的最长链长度的点弹出栈;
- 递归进其它儿子;
- 此时栈内的点就是对 \(x\) 独特的节点,可以统计 \(x\) 的答案;
- 将 \(x\) 的父亲出栈。
复杂度 \(O(n)\) 的。
https://www.luogu.com.cn/problem/P11993
半年前看了好久这题题解,但是没看懂,今天看了好久看懂了。
感觉看不懂是有原因的,这个题就是很难讲,我觉得我也讲不清楚,https://www.luogu.com.cn/record/278761543。

浙公网安备 33010602011771号