1 条题解
-
0
题解
本题要求在满足每个顶点度数 的条件下,从给定图中选取最大边数的子图(candy 子图)。由于 且每个顶点至多属于 个简单环,可以利用 DFS 树结构、回边枚举与状压 DP 在可接受的时间内求出精确解。
1. Candy 图的结构
Candy 图的每个连通分量只能是:
- 简单路径(两端点度数为 ,中间点度数为 )
- 简单环(所有点度数为 )
2. DFS 树与回边
对图 构建一棵 DFS 树。树边是在 DFS 过程中首次访问某顶点时走过的边,其余边为回边。
由于每个顶点至多属于 个简单环,经过每个顶点的回边数量也 。选择一个顶点 作为中心,暴力枚举经过 的所有回边是否出现在最终子图中。每条选中的回边 会消耗 和 的度数上限各 。
设 为顶点 的剩余度数上限,初始 。选中一条回边 后执行 ,。若某顶点的 ,则该选择方案非法。
确定经过 的回边选择后,删除顶点 以及这些回边(及受影响的树边),图分裂为若干连通块,每块需独立求解。
3. 子问题的状压 DP
对每个连通块,设其顶点集大小为 。因为选取 为 DFS 树的重心,可保证 。
在该块内进行状压 DP:
- :已完全处理的顶点集合 中,构成的 candy 子图的最大边数。
- :顶点集 已处理,最后一条正在构建的路径从 到 , 表示该路径是否仅由一条边构成。
状态转移(所有操作需满足顶点剩余度数约束):
-
开始新路径:若 是边,,且 :
-
延长路径:若 , 是边,且 :
$$dp[mask][u][v][l_1] + 1 \to dp[mask \cup \{w\}][u][w][0] $$ -
闭合为环:若 , 是边,且 :
-
跳过一个顶点:若 :
初始 ,最终答案为 。
4. 两次计算连通块
因为删除中心 时,与 相连的某条树边可能将 的度数消耗传递到相邻块中的某个顶点,使其剩余度数减少 。因此每个连通块需计算两次:一次假设该相邻边未被选中(度数不变),一次假设被选中(度数减 )。
5. 边的数量上界证明
定理:在满足“每个顶点至多属于 个简单环”的图中,有 。
证明(归纳法):
假设对所有 的图成立。考虑大小为 的图。- 取一棵 DFS 树。叶子顶点在 DFS 树中的度数为 (仅与父节点相连)。
- 若叶子有 条回边与之相连,则经过该叶子的简单环至少有 个(每两条回边与树边构成一个环)。
- 由于每个顶点至多属于 个环,必须有 ,解得 。
- 因此叶子的总度数 ?实际上更精细的分析给出叶子度数 。
故任意图中存在度数 的顶点。删除该顶点及其相连边,剩余图有 个顶点,由归纳假设其边数 。加上被删边最多 条,总边数 。
6. 总复杂度分析
- 每个连通块大小 ,子问题 DP 复杂度 。
- 枚举中心顶点的回边子集:最多 种。
- 综上,总时间复杂度: 代入 :
在 时,,总操作次数约 ,在 秒时限内可通过。
7. 总结
本解法充分利用了图的特殊性质(每顶点所属环数 ,)与较小的 ,通过DFS 树 + 重心分解 + 枚举回边 + 状压 DP 的组合技巧,将问题精确求解。状压 DP 巧妙地区分路径和环的构建过程,并利用度数约束剪枝,使得搜索空间可控。
- 1
信息
- ID
- 6965
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者