#G0150. 构造树【2026暑假集训T4】

构造树【2026暑假集训T4】

题目描述

七萤 编写了一段程序,该程序的输入只有一个正整数 xx

每次操作,你需要选择一个 xx 满足 1x2×n 1 \leq x \leq 2 \times n 作为该程序的输入,然后该程序会执行以下操作:

def E = {}
while(x = input){
    for(i = 1 to n){
        def v = x - i
        if (v >= 1 and v <= n and edge(i,v) is not in E)
            add edge(i,v) to E
    }
}
print E

即:初始边集为空,对于每次输入的 xx,对于 i=1,2,...,ni=1,2,...,n 判断,若 1xin1 \leq x - i \leq niixix-i 没有边,则系统会加入一条 iixix-i 的无向边到边集中。

现在给定正整数 nn,你需要用不超过 n \lceil \sqrt{n} \space\rceil 次操作,使得该程序输出的边集能够构造出一棵树,且树的直径不超过 4040

树的直径为树上最远两点的距离。

树:nn 个点 n1n - 1 条边的无向连通图。

输入格式

第一行一个正整数 nn (2n2×1052 \leq n \leq 2 \times 10^5),表示树中的结点总数。

输出格式

第一行一个整数 mm (mn m \leq \lceil \sqrt{n} \space\rceil),表示使用的操作次数。

第二行 mm 个正整数,以空格隔开,表示所选择的 xx。如果有多种解决方案,你只需要输出任意一种合法方案。

2
1
3

样例解释

输入 x=3x=3 时,系统将加入一条边:121-2

最终构成的树为 121 - 2,树的直径为 11,满足条件。

数据规模与约定

评分方式如下:

如果你的输出不合法或者无法构造出一棵树,则获得 00 分。

否则,假设你用 mm 次操作构造出了直径为 dd 的树,则你的得分为:

如果 m>2n m > 2\lceil \sqrt{n} \space\rceil,则获得 00 分。 否则,获得 $100 \times min(1,\frac{\lceil \sqrt{n} \space\rceil}{m}) \times min(1,\frac{40}{d})$ 分。

对于所有测试数据,你的得分为按上述规则获得的分数的

对于 100%100\% 的数据:保证 1n2×1051 \leq n \leq 2 \times 10^5