1 条题解

  • 0
    @ 2026-5-5 22:19:16

    题解

    本题要求在满足每个顶点度数 2\le 2 的条件下,从给定图中选取最大边数的子图(candy 子图)。由于 n30n \le 30 且每个顶点至多属于 55 个简单环,可以利用 DFS 树结构、回边枚举与状压 DP 在可接受的时间内求出精确解。


    1. Candy 图的结构

    Candy 图的每个连通分量只能是:

    • 简单路径(两端点度数为 11,中间点度数为 22
    • 简单环(所有点度数为 22

    2. DFS 树与回边

    对图 GG 构建一棵 DFS 树。树边是在 DFS 过程中首次访问某顶点时走过的边,其余边为回边。
    由于每个顶点至多属于 55 个简单环,经过每个顶点的回边数量也 5\le 5

    选择一个顶点 vv 作为中心,暴力枚举经过 vv 的所有回边是否出现在最终子图中。每条选中的回边 (x,y)(x, y) 会消耗 xxyy 的度数上限各 11

    did_i 为顶点 ii 的剩余度数上限,初始 di=2d_i = 2。选中一条回边 (x,y)(x, y) 后执行 dxdx1d_x \leftarrow d_x - 1dydy1d_y \leftarrow d_y - 1。若某顶点的 di<0d_i < 0,则该选择方案非法。

    确定经过 vv 的回边选择后,删除顶点 vv 以及这些回边(及受影响的树边),图分裂为若干连通块,每块需独立求解。


    3. 子问题的状压 DP

    对每个连通块,设其顶点集大小为 NN。因为选取 vv 为 DFS 树的重心,可保证 Nn/2N \le \lfloor n/2 \rfloor

    在该块内进行状压 DP:

    • ans[mask]ans[mask]:已完全处理的顶点集合 maskmask 中,构成的 candy 子图的最大边数。
    • dp[mask][u][v][l1]dp[mask][u][v][l_1]:顶点集 maskmask 已处理,最后一条正在构建的路径从 uuvvl1{0,1}l_1 \in \{0,1\} 表示该路径是否仅由一条边构成。

    状态转移(所有操作需满足顶点剩余度数约束):

    1. 开始新路径:若 (u,v)(u, v) 是边,u,vmasku, v \notin mask,且 du1,dv1d_u \ge 1, d_v \ge 1

      ans[mask]+1dp[mask{u,v}][u][v][1]ans[mask] + 1 \to dp[mask \cup \{u, v\}][u][v][1]
    2. 延长路径:若 wmaskw \notin mask(v,w)(v, w) 是边,且 dv=2,dw1d_v = 2, d_w \ge 1

      $$dp[mask][u][v][l_1] + 1 \to dp[mask \cup \{w\}][u][w][0] $$
    3. 闭合为环:若 l1=0l_1 = 0(u,v)(u, v) 是边,且 du=dv=2d_u = d_v = 2

      dp[mask][u][v][0]+1ans[mask]dp[mask][u][v][0] + 1 \to ans[mask]
    4. 跳过一个顶点:若 wmaskw \notin mask

      ans[mask]ans[mask{w}]ans[mask] \to ans[mask \cup \{w\}]

    初始 ans[]=0ans[\emptyset] = 0,最终答案为 ans[全集]ans[\text{全集}]


    4. 两次计算连通块

    因为删除中心 vv 时,与 vv 相连的某条树边可能将 vv 的度数消耗传递到相邻块中的某个顶点,使其剩余度数减少 11。因此每个连通块需计算两次:一次假设该相邻边未被选中(度数不变),一次假设被选中(度数减 11)。


    5. 边的数量上界证明

    定理:在满足“每个顶点至多属于 55 个简单环”的图中,有 m3nm \le 3n

    证明(归纳法)
    假设对所有 n<Nn < N 的图成立。考虑大小为 NN 的图。

    • 取一棵 DFS 树。叶子顶点在 DFS 树中的度数为 11(仅与父节点相连)。
    • 若叶子有 kk 条回边与之相连,则经过该叶子的简单环至少有 (k2)\binom{k}{2} 个(每两条回边与树边构成一个环)。
    • 由于每个顶点至多属于 55 个环,必须有 (k2)5\binom{k}{2} \le 5,解得 k3k \le 3
    • 因此叶子的总度数 1(树边)+3(回边)=4\le 1 (\text{树边}) + 3 (\text{回边}) = 4?实际上更精细的分析给出叶子度数 3\le 3

    故任意图中存在度数 3\le 3 的顶点。删除该顶点及其相连边,剩余图有 N1N-1 个顶点,由归纳假设其边数 3(N1)\le 3(N-1)。加上被删边最多 33 条,总边数 3N\le 3N\square


    6. 总复杂度分析

    • 每个连通块大小 Nn/2N \le n/2,子问题 DP 复杂度 O(2NNm)O(2^N \cdot N \cdot m)
    • 枚举中心顶点的回边子集:最多 25=322^5 = 32 种。
    • 综上,总时间复杂度:O(252n/2nm)O\left(2^5 \cdot 2^{n/2} \cdot n \cdot m\right) 代入 m3nm \le 3nO(252n/2n2)O\left(2^5 \cdot 2^{n/2} \cdot n^2\right)

    n30n \le 30 时,2n/2215=327682^{n/2} \le 2^{15} = 32768,总操作次数约 32×32768×9009.4×10832 \times 32768 \times 900 \approx 9.4 \times 10^8,在 55 秒时限内可通过。


    7. 总结

    本解法充分利用了图的特殊性质(每顶点所属环数 5\le 5m3nm \le 3n)与较小的 nn,通过DFS 树 + 重心分解 + 枚举回边 + 状压 DP 的组合技巧,将问题精确求解。状压 DP 巧妙地区分路径和环的构建过程,并利用度数约束剪枝,使得搜索空间可控。

    • 1

    信息

    ID
    6965
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者