abc抓人游戏
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一颗 n 个结点的无向无根树,树上有三个人在做游戏,记他们分别为 A,B,C

A 需要依次抓住 BC (也就是说 A 需要先抓住 B 之后才能去抓 C(在此之前 C 可以看作是无敌的,且 C 可以和 A,B 处于同一结点上))。

每一秒 A,B,C 都可以经过一条树上边(也可以位于当前结点不动),且若 AA 当前要抓的人在某一条边上相遇,也看做是 A 抓住了当前需要抓住的人(显然两者应该是在当前边的中点相遇,所以 A 应当是花了 0.5 秒就可以抓住当前目标)。

游戏开始于 0 时刻,此时 A,B,C 是分别处于不同结点上的,A 遵循的操作是“尽可能快的抓住自己当前的目标”, B 遵循的操作是“在使自己尽可能晚被抓住的前提下使 C 尽可能晚的被抓住”,C 遵循的操作使“使自己尽可能晚的被抓住”。

已知 A,B,C 都是非常聪明的(总会做出最有利与自己的选择),你能告诉牛牛 A 抓住 BC 的时刻分别是多少吗?

输入描述:

输入第一行一个整数 n 代表树的结点个数。
接下来 n-1 行每行两个整数 u,v 代表结点 u 和结点 v 之间存在一条无向边。
接下来一行三个不同的整数 a,b,c 分别代表 A,B,C 初始时的位置。
保证:
输入数据是一棵树。

输出描述:

输出共一行分别代表 A 抓住 BA 抓住 C 的时刻。
示例1

输入

复制
4
1 2
2 3
3 4
3 1 2

输出

复制
2 5

说明

A 在编号为 1 的点抓住 B(需要两步),在编号为 4 的点抓住 C(需要三步)。
示例2

输入

复制
8
1 2
2 3
3 4
2 5
5 6
6 7
7 8
2 1 4

输出

复制
1 4

说明

A 在编号为 1 的点抓住 B(需要一步),在编号为 4 的点抓住 C(需要三步)。