#BZOJ4301. HDU 5300 Angry Trees
HDU 5300 Angry Trees
题目描述
JRY很有钱,他买了很多树,种在院子里。由于他的个人喜好,所有这些树的形状都一样。起初,这些树很小,很安静,但经过几年的生长,它们变得巨大,争夺有限的水和营养。因此,他们变得愤怒,他们共同的敌人是JRY,因为是JRY把他们栽在这么“小”的地方(尽管他的院子是世界上最大的)。
有m棵愤怒树,每棵愤怒树有n个节点和n - 1个分支。所有愤怒的树都决定结合在一起,它们长出了额外的m - 1根树枝,这样它们就能合而为一了。并且,它们选择第一棵树的第一个节点作为整个巨树的根。现在,有一棵巨大的树,有nm个节点和nm - 1个分支。
树想出了一个复仇的主意。当JRY处于睡眠状态时,他们将JRY拖到其中一个节点上,并窃取JRY的所有资金并将其放在一个节点上(两个节点可以相同也可以不同)。当JRY醒来时,他肯定会去拿这些钱。每次JRY沿着分支向下移动(向根移动),他将花费1个单位时间,当他沿着分支向上移动(远离根)时,他将花费2个单位时间。此外,聪明的JRY总是沿着树上他和他的钱之间的最短路径移动。
树的一个噩梦是找到JRY找到他的钱所需的最长时间,他们还需要知道有多少种不同的方法可以获得这个最长时间(当且仅当JRY的初始位置不同或钱的位置不同时,两种方法被认为是不同的)。你能帮助他们吗?
输入格式
输入的第一行是一个整数T,表示测试用例的数量。
对于每个测试用例,第一行是两个整数n和m(1n,m50000)。接下来的n−1行每一行包含两个整数x和y,代表每棵树的一个分支(x,y)。下面的每条m−1行包含4个整数x,a,y,b,这意味着有一个额外的分支连接x树的第a个节点和y树的第b个节点。保证了每个小树或整个树都是无环连通无向图。请注意,第一个树(编号为1的树)的第一个节点(编号为1的节点)是整个树的根。
可以保证,对于所有的测试用例,Siga(n)+Sigma(m)<=1000000。
输出格式
对于每个测试用例,打印两个空格分隔的整数,指示JRY找到他的钱所需的最长时间和到达这个上限的位置方式。
2
3 3
3 1
2 1
3 1 2 2
1 3 2 1
3 8
3 1
2 3
4 3 3 1
3 1 2 3
6 2 1 3
8 3 7 3
5 3 7 3
6 3 7 2
8 3 2 2
11 2
22 3