#loj5627. 「POI2026 R2」Dwukolorowe drzewo

「POI2026 R2」Dwukolorowe drzewo

AdditionalFile5627.zip

#5627. 「POI2026 R2」Dwukolorowe drzewo

标签: 传统 | 时间限制: 5000 ms | 内存限制: 512 MiB |

题目描述

题目译自 XXXIII Olimpiada Informatyczna – II etap Dwukolorowe drzewo

Bajtazar 的花园里长着一棵树。它由编号为 11nnnn 个节点组成,其中 nn 为偶数。这棵树包含 n1n-1 条树枝,每条树枝直接连接两个节点。此外,正如树木通常的情况,每对节点之间存在唯一一条由不重复树枝组成的路径。

比特托邦的国旗日即将到来,因此 Bajtazar 决定将树中一半的节点染成白色,另一半染成黑色,使其看起来像比特托邦的国旗(由于比特托邦人重视和谐与对称,他们的国旗由一半白色和一半黑色组成)。我们将任何这样的染色方案称为国旗染色

然而,Bajtazar 如果不提出些奇怪的要求就不是他了。他认为国旗染色的美感取决于所有同色节点对之间的距离之和。这里两节点之间的距离是指连接它们的路径上的树枝数量。

Bajtazar 希望这个总和尽可能大。请帮助他找到这个最大和,以及达到该最大和的任意一种国旗染色方案!

输入格式

第一行包含一个偶数 nn (1n106)(1 \leq n \leq 10^{6}),表示树中的节点数量。

接下来的 n1n-1 行包含树枝的描述。第 ii (1in1)(1 \leq i \leq n-1) 行包含两个整数 ai,bia_{i}, b_{i} (1ai,bin,aibi)(1 \leq a_{i}, b_{i} \leq n, a_{i} \neq b_{i}),表示节点 aia_{i}bib_{i} 之间由一条树枝直接相连。

输出格式

第一行输出在给定树的节点国旗染色方案中,同色节点对之间距离的最大和。

第二行输出一个由 nn 个字符组成的字符串,描述达到该总和的国旗染色方案。在该字符串中,第 ii (1in1)(1 \leq i \leq n-1) 个字符如果是 0,表示节点 ii 被染成白色;如果是 1,表示它被染成黑色。

样例

输入

6
1 2
2 4
2 3
1 5
5 6

输出

14
011001

上述样例中的树如下图所示。节点按照示例输出中的结果进行染色。白色节点(标注为 0)之间的路径包括:节点 1155(长度为 11)、1144(长度为 22)以及 5544(长度为 33)。黑色节点(标注为 1)之间的路径包括:节点 2233(长度为 11)、2266(长度为 33)以及 3366(长度为 44)。这些路径长度的总和为 1+2+3+1+3+4=141+2+3+1+3+4=14。可以证明,无法获得更大的同色节点对路径长度之和。

附加样例

  1. n=16n=16,节点 ii 与节点 i2i-2 相连(对于 3in3 \leq i \leq n),且节点 88 与节点 99 相连。
  2. n=24n=24,所有编号大于 11 的节点均与节点 11 相连。
  3. n=5000n=5000,编号从 3325012501 的节点均与节点 11 相连,编号从 2502250250005000 的节点均与节点 22 相连,且节点 11 与节点 22 相连。
  4. n=100000n=100000,节点 ii 与节点 i1i-1 相连(对于 2in2 \leq i \leq n)。
  5. n=1000000n=1000000,节点 ii 与节点 i/2\lfloor i / 2 \rfloor 相连(对于 2in2 \leq i \leq n)。

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 77 n16n \leq 16
22 1212 n24n \leq 24
33 99 每个节点最多与另外两个节点相连
44 2121 每个节点最多与另外三个节点相连
55 1919 n5000n \leq 5000
66 1313 n100000n \leq 100000
77 1919 无附加限制

如果你只输出了正确的第一行(即最大和),你的程序将获得该测试点 50%50\% 的分数。为了获得这部分分数,你不需要输出第二行。