1 条题解

  • 0
    @ 2025-10-26 10:37:40

    题目理解

    • 我们有一个 n×mn \times m 的网格图,每个点 (i,j)(i,j) 与上下左右四个方向的相邻点有边相连。
    • 我们要构造它的生成树(即包含所有 nmn \cdot m 个顶点且无环的连通子图)。
    • 这棵生成树的直径(最长简单路径的边数)必须恰好等于 kk
    • 输出时,如果可行,先输出 TAK,然后输出 nm1n \cdot m - 1 条边,每条边用两个端点的坐标表示。

    关键思路

    1. 直径的上下界

      • 生成树直径的最小值:至少是网格图中两个最远点的曼哈顿距离。例如,从 (1,1)(1,1)(n,m)(n,m) 的曼哈顿距离是 n+m2n+m-2
      • 生成树直径的最大值:可以构造一条很长的路径,最大可能直径是 nm1n \cdot m - 1(即所有点排成一条链)。

      因此,如果 kk 不在 [n+m2,nm1][n+m-2, \, n \cdot m - 1] 范围内,则直接输出 NIE

    2. 构造方法

      • 通常的做法是先构造一条长链作为直径,然后将其它点挂到这条链上。
      • 我们可以让直径从 (1,1)(1,1) 出发,先向右走到 (1,m)(1,m),再向下走到 (n,m)(n,m),这样这条路径的边数是 (m1)+(n1)=n+m2(m-1) + (n-1) = n+m-2
      • 如果 kk 大于 n+m2n+m-2,我们可以在路径的中间某处“绕路”来增加长度。
      • 例如,在路径的某个位置绕到另一行再绕回来,每绕一次增加 2 条边。
      • 绕路时要保证不破坏树的形状,并且最终能覆盖所有点。
    3. 特殊情况

      • n=1n=1m=1m=1 时,图本身就是一条链,直径固定为 nm1n \cdot m - 1,只能等于这个值,否则 NIE
      • kk 太小(小于 n+m2n+m-2)时,不可能构造,因为网格图本身的最远点距离已经大于 kk
    4. 输出格式

      • 输出边时,只要保证是生成树且直径正确,任意方案均可。
      • 注意坐标范围是 1i1,i2n1 \le i_1,i_2 \le n1j1,j2m1 \le j_1,j_2 \le m

    样例分析

    样例 1

    n=2, m=3, k=4
    

    最小直径 = 2+32=32+3-2=3,最大直径 = 61=56-1=5k=4k=4 在范围内,可以构造。

    样例 2

    n=2, m=3, k=1
    

    最小直径 = 3,k=1<3k=1<3,输出 NIE


    难点

    • 如何灵活地调整路径长度,使其恰好等于 kk
    • 保证构造过程不形成环,且覆盖所有点。
    • 对于 n,mn, m 较大时,需要高效构造,不能真的存储所有边再输出,而是按规律生成。

    • 1

    信息

    ID
    4143
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    15
    已通过
    1
    上传者