1 条题解
-
0
题目理解
- 我们有一个 的网格图,每个点 与上下左右四个方向的相邻点有边相连。
- 我们要构造它的生成树(即包含所有 个顶点且无环的连通子图)。
- 这棵生成树的直径(最长简单路径的边数)必须恰好等于 。
- 输出时,如果可行,先输出
TAK,然后输出 条边,每条边用两个端点的坐标表示。
关键思路
-
直径的上下界
- 生成树直径的最小值:至少是网格图中两个最远点的曼哈顿距离。例如,从 到 的曼哈顿距离是 。
- 生成树直径的最大值:可以构造一条很长的路径,最大可能直径是 (即所有点排成一条链)。
因此,如果 不在 范围内,则直接输出
NIE。 -
构造方法
- 通常的做法是先构造一条长链作为直径,然后将其它点挂到这条链上。
- 我们可以让直径从 出发,先向右走到 ,再向下走到 ,这样这条路径的边数是 。
- 如果 大于 ,我们可以在路径的中间某处“绕路”来增加长度。
- 例如,在路径的某个位置绕到另一行再绕回来,每绕一次增加 2 条边。
- 绕路时要保证不破坏树的形状,并且最终能覆盖所有点。
-
特殊情况
- 当 或 时,图本身就是一条链,直径固定为 ,只能等于这个值,否则
NIE。 - 当 太小(小于 )时,不可能构造,因为网格图本身的最远点距离已经大于 。
- 当 或 时,图本身就是一条链,直径固定为 ,只能等于这个值,否则
-
输出格式
- 输出边时,只要保证是生成树且直径正确,任意方案均可。
- 注意坐标范围是 ,。
样例分析
样例 1
n=2, m=3, k=4最小直径 = ,最大直径 = , 在范围内,可以构造。
样例 2
n=2, m=3, k=1最小直径 = 3,,输出
NIE。
难点
- 如何灵活地调整路径长度,使其恰好等于 。
- 保证构造过程不形成环,且覆盖所有点。
- 对于 较大时,需要高效构造,不能真的存储所有边再输出,而是按规律生成。
- 1
信息
- ID
- 4143
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 15
- 已通过
- 1
- 上传者