#G0150. 构造树【2026暑假集训T4】
构造树【2026暑假集训T4】
题目描述
七萤 编写了一段程序,该程序的输入只有一个正整数 。
每次操作,你需要选择一个 满足 作为该程序的输入,然后该程序会执行以下操作:
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
即:初始边集为空,对于每次输入的 ,对于 判断,若 且 与 没有边,则系统会加入一条 到 的无向边到边集中。
现在给定正整数 ,你需要用不超过 次操作,使得该程序输出的边集能够构造出一棵树,且树的直径不超过 。
树的直径为树上最远两点的距离。
树: 个点 条边的无向连通图。
输入格式
第一行一个正整数 (),表示树中的结点总数。
输出格式
第一行一个整数 (),表示使用的操作次数。
第二行 个正整数,以空格隔开,表示所选择的 。如果有多种解决方案,你只需要输出任意一种合法方案。
2
1
3
样例解释
输入 时,系统将加入一条边:
最终构成的树为 ,树的直径为 ,满足条件。
数据规模与约定
评分方式如下:
如果你的输出不合法或者无法构造出一棵树,则获得 分。
否则,假设你用 次操作构造出了直径为 的树,则你的得分为:
如果 ,则获得 分。 否则,获得 $100 \times min(1,\frac{\lceil \sqrt{n} \space\rceil}{m}) \times min(1,\frac{40}{d})$ 分。
对于所有测试数据,你的得分为按上述规则获得的分数的和。
对于 的数据:保证 。