1 条题解

  • 0
    @ 2026-8-19 22:36:18

    题解

    思路

    把每对夫妻看成一个顶点。若男方 BiB_i 曾与女方 GjG_j 交往,就连一条从 ii 指向 jj 的边。

    ii 对婚姻不安全,当且仅当顶点 ii 位于一个有向环中。沿环依次让每位男方与下一对婚姻中的女方结合,就能在拆散婚姻 ii 后重新组成全部情侣;反过来,任何重新配对相对于原婚姻都会分解成若干交替环,因此涉及婚姻 ii 的重新配对必然给出经过 ii 的有向环。

    所以只需判断每个顶点是否属于大小至少为二的强连通分量。

    做法

    用姓名到夫妻编号的映射把每条旧关系转换为有向边。运行强连通分量算法,记录每个顶点所属分量及每个分量的大小。

    若顶点所在分量大小至少为二,输出 Unsafe;否则输出 Safe

    正确性证明

    若顶点 ii 位于有向环 i=p1,p2,,pk,ii=p_1,p_2,\ldots,p_k,i,则男方 BptB_{p_t} 都曾与女方 Gpt+1G_{p_{t+1}} 交往。让这些男方沿环与下一位女方重新结合,环外夫妻保持不变,就能在婚姻 ii 拆散后重新组成 nn 对情侣,因此婚姻 ii 不安全。

    若婚姻 ii 不安全,比较重新配对与原婚姻。每个人在两种配对中度数都为一,两组边的对称差分解为交替环。包含婚姻 ii 的交替环对应夫妻顶点图中经过 ii 的有向环,所以 ii 与环上其他顶点互相可达,属于大小至少为二的强连通分量。

    因此算法对每对婚姻的判断都正确。

    复杂度

    • 时间复杂度:O(n+m)O(n+m)
    • 空间复杂度:O(n+m)O(n+m)
    • 1

    信息

    ID
    893
    时间
    2000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者