2025.4.2西安集训图论做题记录

Quare

要点

  1. 边双处理通过耳分解

题解

枚举集合,设 \(f_S\) 表示集合 \(S\) 的答案,转移需要枚举耳,所以增加一个辅助函数 \(g_{S,u,v}\) 表示考虑集合 \(S\),枚举的耳起点为 u 终点为 v 且 \(u\not \in S,v\in S\) 的答案。转移时依次分讨:

  1. \(u\rightarrow v\rightarrow u\),直接加两条边
  2. 枚举起点的下一个点
  3. 转移 g
  4. 转移 f

时间复杂度 \(O(2^nn^3)\)

生成树

要点

  1. 广义串并联图

题解

板子。对于每条边考虑贡献,维护 \(f\)\(g\) 分别表示这条边在/不在最小生成树的方案。每次删掉度数为零的点,统计度数为一的点的贡献,合并度数为二的点。

放学路

要点

  1. 根据部分分推出正解
  2. 广义串并联图简化题目

题解

按照部分分讲。当 m 很小的时候可以爆搜路径,当 n 很小的时候可以状压点集。当 \(m-n\) 很小的时候可以想到广义串并联图简化原图,然后就转化成 m、n 很小的时候了。注意在删点的时候保留 1 和 n。一度点直接删,因为对答案无影响;二度点合并时要注意重边,没有重边就正常合并,有的话就设成 -1,最后如果仅剩下一条边且不为 -1,那么答案就一定为不存在。但是这样的判法貌似并不是平凡的,其实只有在点双中才满足,证明考虑反证法。如果不是点双,我们的最短路可能经过多条割边,如果最短路在每个点双中不存在次短路,那么我们的判断就会出错。所以我们其实要判断最短路上经过的每个点双中的信息,但是这样太麻烦了,我们可以添加一条边 \((1,n,dis(1,n))\) 这样既不会影响答案,还能保证 1 和 n 在一个点双中,更容易代码实现。

Graph

简单题,随便贪一贪做即可。注意添加边相当于将一个点从拓扑序上往后移动,我们打标记实现,并且我们不关心它在哪里,只关心最后的拓扑序,所以正常用堆维护拓扑排序即可。考虑拓扑序上相邻点间必定会连边,显然。

posted @ 2025-04-04 15:26  Lyrella  阅读(44)  评论(1)    收藏  举报