CF2134D.Sliding Tree

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一棵包含 nn 个顶点的树(编号从 11 到 nn)。你可以按如下多步操作(称为滑动操作)来修改其结构:

  1. 选择三个不同的顶点 aa、bb、cc,其中 bb 直接和 aa、cc 相连。
  2. 对于 bb 的所有邻居 dd(不包括 aa 和 cc),移除 bb 和 dd 之间的边,并将 dd 直接与 cc 相连。

例如,下图展示了在最左侧的树中,a=4a = 4,b=3b = 3,c=5c = 5 时的这一操作。

可以证明,经过一次滑动操作后,得到的图仍然是一棵树。

你的任务是找到一系列滑动操作,使树最终转变为一条路径图,并且操作次数最少。如果至少需要一次操作,则只需输出最优方案中的第一次滑动操作。可以证明,一定可以用有限步操作将树变为一条路径图。

注:
∗^{\ast} 一棵树是一个无环连通图。
†^{\dagger} 路径图是每个顶点的度数都不超过 22 的树。注意,只有一个顶点且没有边的图也算作路径图。

输入格式

每组测试数据包含多组测试用例。
第一行为测试用例个数 tt(1≤t≤1041 \le t \le 10^4)。每组测试用例描述如下:

第一行包含一个整数 nn(1≤n≤2⋅1051 \le n \le 2 \cdot 10^5),表示树的顶点数。

接下来 n−1n-1 行,每行包含两个整数 uiu_i 和 viv_i(1≤ui,vi≤n1 \le u_i, v_i \le n,ui≠viu_i \ne v_i),表示树中的一条边。

保证给定的边能构成一棵树。

保证所有测试用例的 nn 之和不超过 2×1052 \times 10^5。

输出格式

对于每个测试用例:

  • 如果不需要任何操作(即输入树本身就是一条路径图),输出 −1-1。
  • 否则,输出第一次滑动操作选择的三个不同顶点 aa、bb、cc(1≤a,b,c≤n1 \le a, b, c \le n)。

如果存在多种合法的第一次操作,你可以输出其中任意一种。

输入输出样例

  • 输入#1

    4
    6
    4 3
    3 5
    3 1
    1 2
    3 6
    1
    2
    1 2
    5
    5 4
    2 3
    4 2
    1 4

    输出#1

    4 3 5
    -1
    -1
    2 4 1

说明/提示

第一个测试用例与题面例图一致。可以证明,无法在少于 2 次操作内将给定树变为路径图。

然而,可以通过如下两次操作将树变为路径图:首先按题面例图以 a=4a=4、b=3b=3、c=5c=5 操作;接着,使用 a=3a=3、b=5b=5、c=6c=6 进行操作。操作后,树变为一条路径图。第二次操作如下图所示:

因此,可以得到最小次数的滑动操作序列。注意,只需输出第一次操作;不需要输出操作次数或后续操作。

在第二个和第三个测试点中,输入的树本身已经是一条路径图,因此不需要任何操作。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页