CF2108E.Spruce Dispute

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

四月的天气已经相当炎热,Polycarp 决定这是拆除他几年前搭建的云杉树的绝佳时机。当他绕着树走了几个小时,积蓄力量时,他注意到一个有趣的现象:这棵云杉实际上是一棵树∗^{\text{∗}}——而且不是普通的树,它由奇数个顶点 nn 组成。更特别的是,n−1n-1 个顶点上挂着圣诞装饰品,这些装饰品恰好涂有 n−12\frac{n-1}{2} 种不同的颜色,每种颜色恰好有两个装饰品。剩下的顶点按照传统,挂着树顶的星星。

经过几天的心理准备,Polycarp 终于开始拆除云杉。他先取下了树顶的星星,并开始拆卸一些树枝,这时他突然想到一个自然的问题:如何移除树的一条边,并重新排列装饰品,使得同色装饰品之间的简单路径长度之和尽可能大?

在这个问题中,移除树的一条边的定义如下:选择一对相邻顶点 aa 和 bb(a<ba < b),然后从树中移除顶点 bb,并将 bb 的所有相邻顶点(除了 aa)直接重新连接到 aa 上。

Polycarp 在得到这个问题的答案之前无法继续拆除云杉。然而,检查所有可能的选项会花费他数年时间。鉴于你在竞赛编程方面的经验,他向你求助。但你能解决这个争议吗?

∗^{\text{∗}} 树是指一个无环的连通图。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 tt(1≤t≤1041 \le t \le 10^4)。接下来是测试用例的描述。

每个测试用例的第一行包含一个奇数 nn(3≤n<2⋅1053 \le n < 2 \cdot 10^5)——树中顶点的数量。

接下来的 n−1n-1 行描述了树的边,每行给出两个相邻顶点 uu 和 vv(1≤u,v≤n1 \le u, v \le n,u≠vu \neq v)。

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

输出格式

对于每个测试用例,你需要输出两行。

第一行输出一对顶点 uu 和 vv,表示 Polycarp 将要移除的边。

第二行输出一个长度为 nn 的数组 cc,其中 c[i]c[i] 表示顶点 ii 被分配的正颜色编号(从 00 到 n−12\frac{n-1}{2})。注意,c[max(u,v)]c[\text{max}(u, v)] 必须为 00,因为该顶点已被移除。

输入输出样例

  • 输入#1

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

    输出#1

    1 2
    2 0 1 1 2
    1 5
    1 1 2 2 0
    4 3
    1 3 3 0 2 2 1

说明/提示

考虑第一个测试用例。

移除连接顶点 11 和 22 的边。之后,顶点 22 将从树中移除,顶点 33 和 44 将被连接到顶点 11。

将顶点 33 和 44 涂为第一种颜色,顶点 11 和 55 涂为第二种颜色。同色装饰品之间的简单路径长度之和为 2+2=42 + 2 = 4。可以证明,这是可能的最大值。

在第二个和第三个例子中,路径长度之和的最大值分别为 33 和 99。

翻译由 DeepSeek V3 完成

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

首页