1 条题解

  • 5
    @ 2026-10-10 9:05:19

    Card

    推荐基环树题目(不涉及建模):NOI2013T6(fast food),NOIP2018T4、NOIP2023T2。

    这题的建模很神秘,我是看TJ的。泪目了。

    题意是:有 nn 个二元组 (ai,0,ai,1)(a_{i,0}, a_{i,1}) ,和长度为 nn 的数组 cc。初始 ci=0,1≤i≤nc_i = 0, 1 \le i \le n。你可以将 cc 中的元素变成任意自然数。满足将集合 $|\{a_{1, c_1 \bmod 2}, a_{2, c_2 \bmod 2}, \dots , a_{i, c_i \bmod 2}\}| = n$。先判断有没有解,随后计算满足条件 min⁡(∑(c))\min (\sum (c)),并计算取到这个值的条件下不 cc 的个数。

    显然,∀i,0≤ci≤1\forall i ,0 \le c_i \le 1。

    注意到如果令 ai,1→ai,0a_{i, 1} \to a_{i, 0} 连边,则满足条件的图(连通块)满足入度不大于 11,操作等价将边置换。那么如果连通块不是一棵树,且不是基环树就无解了。

    随后对树,基环树分类。

    如果是一棵树,最终的结果必然是外向树。所以我们枚举根节点并钦定他为根计算最小代价,方案数只有 11 种,累加就行。需要用到换根DP。

    令 f1f_1 是答案。

    • f1f_1 是以 11 为根节点有几条边要置换
    • fv=ffa+1f_v = f_{fa} + 1 如果在以 fafa 为根的时候,fa→vfa\to v 不必置换.
    • fv=ffa−1f_v = f_{fa} - 1 如果在以 fafa 为根的时候,fa→vfa\to v 必置换.

    答案极为最小的 ff ,方案数是最小值的个数。

    对于基环树,先仅仅考虑环,你发现只有顺时针、逆时针两种本质不同的情况。

    在考虑环点的树,它们只能钦定环点为根,因为环上所有点的入度均为 11,相当于前面的 DP,不带换根。

    注意点数为 22 的环。

    细节我写一点:

    1. 遍历的时候要把有向边看成无向边。
    2. 你要实现基环树的找环,且环上点均要找到。
    3. 多个连通块分别考虑
    4. 对于答案,内部是最小值取小,相等才加方案数。外部是最小值相加,方案数相乘。因为连通块是独立的.
    5. 本题数组开 2×1052\times 10^5 即 2n2n。
    • @ 2026-10-10 9:37:15

      这个题解写的不错。以后都这么写。

    • @ 2026-10-13 9:48:44

      勘误与解读

      勘误:

      • “并计算取到这个值的条件下不 cc 的个数” 应改为 “不同 cc 的个数”。

      解读:

      注意到如果令 ai,1→ai,0a_{i,1} \to a_{i,0} 连边,则满足条件的图(连通块)满足入度不大于 1,操作等价将边置换。那么如果连通块不是一棵树,且不是基环树就无解了。

      • 为什么“满足条件的图(连通块)满足入度不大于 1”?

        • 可以发现,一个元素的入度 = 它在序列中出现的次数。
      • 为什么“操作等价将边置换”?

        • 操作相当于让 ai,0a_{i, 0} 减少一个,ai,1a_{i,1} 增加一个。通过边的方向反转,可以让 ai,0a_{i,0} 入度 −1-1,让 ai,1a_{i,1} 入度 +1+1。
      • 为什么“如果连通块不是一棵树,且不是基环树就无解了。”

        • 因为边的方向可以改变,因此将所有有向边看作成无向边。
        • 先证明充分性。如果联通块将有向边当作无向边之后,是树/基环树,那么可以将所有边转换成从父亲指向儿子的边。这样,所有节点的入度都满足“不大于 1”的约束。
        • 再证明必要性。假设这个联通块大小为 ss,边的数量为 mm。所有节点的入度之和 ∑indu=m\sum ind_u = m。如果有解,那么 m≤sm \le s。那么形成的结构一定是树/基环树。
        • 因此,联通块为树/基环树 ⇔\Leftrightarrow 有解。

信息

ID
2788
时间
1000ms
内存
128MiB
难度
9
标签
(无)
递交数
94
已通过
4
上传者