1 条题解

  • 0
    @ 2026-8-30 10:53:39

    题解

    思路推导

    把“第 vv 章要求先理解第 uu 章”看作一条有向边 u→vu\to v。若图中存在有向环,环上的任意一章都要等待环内另一章,因此整本书永远无法被完全理解。

    假设依赖图无环。设 dvd_v 为最早能理解第 vv 章时已经阅读整本书的遍数。沿依赖边 u→vu\to v 考虑:如果 u<vu<v,同一遍阅读中先读到 uu,随后还能理解 vv,所以只要求 dv≥dud_v\ge d_u;如果 u>vu>v,这一遍先错过了 vv 才读到 uu,必须等下一遍,因此要求 dv≥du+1d_v\ge d_u+1。

    做法

    按依赖关系建立有向图并统计每个顶点的入度。把所有入度为零的章节加入队列,初始最早遍数均为 11。

    每次取出一个章节 uu,枚举它指向的章节 vv,用

    dv←max⁡(dv,du+[u>v])d_v\leftarrow\max(d_v,d_u+[u>v])

    更新。随后将 vv 的入度减一;入度归零时加入队列。

    若最终处理的章节数不足 nn,图中存在环,答案为 −1-1。否则答案为所有 dvd_v 的最大值。

    正确性证明

    拓扑处理中,一个章节入队时,它的全部前置章节都已处理。对每条依赖边,转移准确表达了前置章节与当前章节能否在同一遍按编号顺序读到,因此 dvd_v 不小于任何合法阅读过程对该边要求的最早遍数。

    反过来,按照计算出的遍数阅读:当在第 dvd_v 遍读到 vv 时,对每个前置章节 uu,若 u<vu<v,转移保证 du≤dvd_u\le d_v,本遍会先理解 uu;若 u>vu>v,转移保证 du<dvd_u<d_v,此前已经理解 uu。所以所有前置条件都满足。由拓扑序归纳,计算值可实现且最小。

    若存在有向环,环上没有章节能在其全部前置章节之前被首先理解;若拓扑处理完全部章节,则图无环。因此环的判定也正确。

    复杂度分析

    设所有前置关系总数为 mm。每个章节和每条边只处理常数次,时间复杂度为 O(n+m)O(n+m),空间复杂度为 O(n+m)O(n+m)。

    • 1

    信息

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