2 条题解

  • 1
    @ 2026-9-20 16:10:59

    理解题意后,实际上就是需要在这个图上选四个点 a,b,c,da,b,c,d,在两点之间走最短路的情况下,使得 a−>b−>c−>da->b->c->d 的路径之和最长。

    很容易想到可以从每个点为起点求出任意两点的最短距离 dis[i][j]dis[i][j]。

    再枚举四个点 a,b,c,da,b,c,d 求 max(disa,b+disb,c+disc,d)max(dis_{a,b}+dis_{b,c}+dis_{c,d}) 即可。

    这样的复杂度是 O(n4)O(n^4),显然只能通过 4040 分。

    对于 9∼109 \sim 10 两个测试点,显然是完全图,那么答案即为 33。

    综上可以获得 5050 分。

    考虑如何优化:

    这里我们可以发现,如果枚举 a,b,ca,b,c,那么只需要找出离 cc 最远的 dd 即可,但是这里我们会发现,离 cc 最远的有可能是 a,ba,b 两个点,所以在极端情况下我们需要求出离 cc 最远的点 fcf_c,第二远的点 gcg_c,第三远的点 hch_c,这样我们就可以直接找到最远的 dd 求得结果。

    那么这样的复杂度是 O(n3)O(n^3),还需要优化。

    这里我们可以发现不可能枚举 a,ba,b 然后找 c,dc,d,但是我们可以枚举 b,cb,c,然后从 bb 出发找 aa,从 cc 出发找 dd,方法同上。

    但是这里要注意,从 bb 出发找 aa 有可能会影响 cc 出发找的 dd,因为它们可能找到最远的是同一个点,所以不同找的顺序可能会影响答案。

    那么这里我们需要讨论两种情况,先从 bb 找 aa,再从 cc 找 dd,以及先从 cc 找 dd,再从 bb 找 aa两种情况里求个最大值即可找到答案。

    • 1
      @ 2026-9-20 15:03:56

      T3

      本题有原题 S2022T1。

      立方是送分的,考虑折半,枚举中间两个点 j,kj, k。令 i−>j−>k−>li->j->k->l。

      则,贪心地,想到维护did_{i}为 ii 到非 ii 点的最大距离。

      显然地,会有 形如 i−>j−>k−>ii->j->k->i 的抽象情况(路径非法)。不难发现改为前三大后判断是否合法即可。

      注意 : n=4000n=4000,这题卡 n2log⁡nn^2 \log n。不要带上不必要的 log⁡\log。

      • 1

      信息

      ID
      2747
      时间
      1000ms
      内存
      512MiB
      难度
      6
      标签
      (无)
      递交数
      48
      已通过
      9
      上传者