#loj5627. 「POI2026 R2」Dwukolorowe drzewo
「POI2026 R2」Dwukolorowe drzewo
#5627. 「POI2026 R2」Dwukolorowe drzewo
标签: 传统 | 时间限制: 5000 ms | 内存限制: 512 MiB |
题目描述
题目译自 XXXIII Olimpiada Informatyczna – II etap Dwukolorowe drzewo
Bajtazar 的花园里长着一棵树。它由编号为 到 的 个节点组成,其中 为偶数。这棵树包含 条树枝,每条树枝直接连接两个节点。此外,正如树木通常的情况,每对节点之间存在唯一一条由不重复树枝组成的路径。
比特托邦的国旗日即将到来,因此 Bajtazar 决定将树中一半的节点染成白色,另一半染成黑色,使其看起来像比特托邦的国旗(由于比特托邦人重视和谐与对称,他们的国旗由一半白色和一半黑色组成)。我们将任何这样的染色方案称为国旗染色。
然而,Bajtazar 如果不提出些奇怪的要求就不是他了。他认为国旗染色的美感取决于所有同色节点对之间的距离之和。这里两节点之间的距离是指连接它们的路径上的树枝数量。
Bajtazar 希望这个总和尽可能大。请帮助他找到这个最大和,以及达到该最大和的任意一种国旗染色方案!
输入格式
第一行包含一个偶数 ,表示树中的节点数量。
接下来的 行包含树枝的描述。第 行包含两个整数 ,表示节点 和 之间由一条树枝直接相连。
输出格式
第一行输出在给定树的节点国旗染色方案中,同色节点对之间距离的最大和。
第二行输出一个由 个字符组成的字符串,描述达到该总和的国旗染色方案。在该字符串中,第 个字符如果是 0,表示节点 被染成白色;如果是 1,表示它被染成黑色。
样例
输入
6
1 2
2 4
2 3
1 5
5 6
输出
14
011001
上述样例中的树如下图所示。节点按照示例输出中的结果进行染色。白色节点(标注为 0)之间的路径包括:节点 和 (长度为 )、 和 (长度为 )以及 和 (长度为 )。黑色节点(标注为 1)之间的路径包括:节点 和 (长度为 )、 和 (长度为 )以及 和 (长度为 )。这些路径长度的总和为 。可以证明,无法获得更大的同色节点对路径长度之和。

附加样例
- ,节点 与节点 相连(对于 ),且节点 与节点 相连。
- ,所有编号大于 的节点均与节点 相连。
- ,编号从 到 的节点均与节点 相连,编号从 到 的节点均与节点 相连,且节点 与节点 相连。
- ,节点 与节点 相连(对于 )。
- ,节点 与节点 相连(对于 )。
数据范围与提示
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 每个节点最多与另外两个节点相连 | ||
| 每个节点最多与另外三个节点相连 | ||
| 无附加限制 |
如果你只输出了正确的第一行(即最大和),你的程序将获得该测试点 的分数。为了获得这部分分数,你不需要输出第二行。