Description
给定一个包含 nnn 个点 mmm 条边的图 GGG,你需要将 GGG 划分为许多条长度为 222 的链,使得每条边都被恰好覆盖 111 次。
1≤n,m≤1051 \le n,m \le 10^51≤n,m≤105
Solution
算法一
首先,我们思考,对于一棵树该如何处理。
考虑 dfs\text{dfs}dfs。
令当前搜到了节点 uuu,我们先向每个孩子 vvv 递归。对于当前的孩子 vvv,若其子树无法完全匹配且存在一条剩下的边 (v,w)(v,w)(v,w),我们将 (u,v,w)(u,v,w)(u,v,w) 连成一条链;对于所有子树完全匹配的 vvv,令这些 vvv 分别为 v1,v2,⋯ ,vxv_1,v_2,\cdots,v_xv1,v2,⋯,vx,则将 (v1,u,v2)(v_1,u,v_2)(v1,u,v2),(v3,u,v4),⋯(v_3,u,v_4),\cdots(v3,u,v4),⋯ 分别连出一条链,从而我们就完成了以 uuu 为根的子树内的匹配。注意,若 xxx 为奇数,则暂时保留 (u,vx)(u,v_x)(u,vx),将其作为 uuu 子树中唯一剩下的边。
显然,最终根节点处不存在剩下的边,当且仅当 mmm 是偶数。同时,当 mmm 是奇数的时候,一定不存在一组合法解,从而我们证明了本做法的正确性。
时间复杂度 O(n+m)O(n+m)O(n+m)。
算法二
我们解决了一棵树的情况,能否搬到图上呢?答案是可以的。
其实,我们只需要执行一次图上深搜,每次枚举 uuu 的出边 (u,v)(u,v)(u,v),若 vvv 未被访问过则进行递归处理即可。
时间复杂度 O(n+m)O(n+m)O(n+m)。

这篇博客讨论了如何在包含n个点m条边的图中,通过算法将图划分为长度为2的链,使得每条边恰好被覆盖1次。算法一基于深度优先搜索,首先解决树形结构的问题,然后扩展到图。算法二直接在图上应用DFS,确保每个节点的出边被遍历。两种算法的时间复杂度均为O(n+m)。
718

被折叠的 条评论
为什么被折叠?



