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\) 对其它子树内的点的限制要弱。所以只要先递归进长儿子,就不需要撤销限制了。

具体来说算法流程如下:

  1. \(x\) 的父亲入栈;
  2. 把距离 \(x\) 不超过 \(x\) 的次长链长度的点弹出栈;
  3. 递归进长儿子;
  4. 把距离 \(x\) 不超过 \(x\) 的最长链长度的点弹出栈;
  5. 递归进其它儿子;
  6. 此时栈内的点就是对 \(x\) 独特的节点,可以统计 \(x\) 的答案;
  7. \(x\) 的父亲出栈。

复杂度 \(O(n)\) 的。

https://www.luogu.com.cn/problem/P11993

半年前看了好久这题题解,但是没看懂,今天看了好久看懂了。

感觉看不懂是有原因的,这个题就是很难讲,我觉得我也讲不清楚,https://www.luogu.com.cn/record/278761543

posted @ 2026-04-16 14:54  Egg_eating_master  阅读(32)  评论(0)    收藏  举报