2025.4.2西安集训图论做题记录
Quare
要点
- 边双处理通过耳分解
题解
枚举集合,设 \(f_S\) 表示集合 \(S\) 的答案,转移需要枚举耳,所以增加一个辅助函数 \(g_{S,u,v}\) 表示考虑集合 \(S\),枚举的耳起点为 u 终点为 v 且 \(u\not \in S,v\in S\) 的答案。转移时依次分讨:
- \(u\rightarrow v\rightarrow u\),直接加两条边
- 枚举起点的下一个点
- 转移 g
- 转移 f
时间复杂度 \(O(2^nn^3)\)。
生成树
要点
- 广义串并联图
题解
板子。对于每条边考虑贡献,维护 \(f\) 和 \(g\) 分别表示这条边在/不在最小生成树的方案。每次删掉度数为零的点,统计度数为一的点的贡献,合并度数为二的点。
放学路
要点
- 根据部分分推出正解
- 广义串并联图简化题目
题解
按照部分分讲。当 m 很小的时候可以爆搜路径,当 n 很小的时候可以状压点集。当 \(m-n\) 很小的时候可以想到广义串并联图简化原图,然后就转化成 m、n 很小的时候了。注意在删点的时候保留 1 和 n。一度点直接删,因为对答案无影响;二度点合并时要注意重边,没有重边就正常合并,有的话就设成 -1,最后如果仅剩下一条边且不为 -1,那么答案就一定为不存在。但是这样的判法貌似并不是平凡的,其实只有在点双中才满足,证明考虑反证法。如果不是点双,我们的最短路可能经过多条割边,如果最短路在每个点双中不存在次短路,那么我们的判断就会出错。所以我们其实要判断最短路上经过的每个点双中的信息,但是这样太麻烦了,我们可以添加一条边 \((1,n,dis(1,n))\) 这样既不会影响答案,还能保证 1 和 n 在一个点双中,更容易代码实现。
Graph
简单题,随便贪一贪做即可。注意添加边相当于将一个点从拓扑序上往后移动,我们打标记实现,并且我们不关心它在哪里,只关心最后的拓扑序,所以正常用堆维护拓扑排序即可。考虑拓扑序上相邻点间必定会连边,显然。

浙公网安备 33010602011771号