问题 6387 --拂晓之前

6387: 拂晓之前

时间限制: 2 Sec  内存限制: 256 MB
提交: 8  解决: 2
[提交][状态][命题人:]

题目描述

「将军,此事请务必慎重…往后历史会怎么评论将军您……」
云骑将军双目半阖,听取手下来报。
「历史自然会有判断,但我对历史的结论无甚兴趣。」
「事成,我此时便是胸有成竹,神闲气定。」
「事败,我此时便是逸乐无度,爱雀失众。」
一只雀儿跳下他的肩膀,他顺势抬手接住。
「我只是做了我的判断罢了。」

给定一棵包含 n 个节点的树和 q 次询问。
每次询问给定三个点 a,b,c,你需要找出两条不同的树链,分别为点 x 到点 y 的树链,和点 y 到点 z 的路径,使得两条树链的公共节点数尽可能多。其中 x,y,z 分别对应 a,b,c 中的一个点。

注意,一条树链内不包含重复节点。

输入

第一行包含两个正整数 n,q (2≤n≤10^5, 1≤q≤10^5) ,表示树上的节点数和询问数。
第二行包含 n-1 个整数 p[2],p[3],...,p[n] (1≤p[i]≤n) ,其中 p[i] 表示节点 i  的父节点。
接下来 n 行,每行包含三个正整数 a,b,c (1≤a,b,c≤n) ,表示每次询问给定的三个节点。注意,三个节点中可能存在相同的节点。

输出

每组询问输出一行包含一个整数,表示两条树链的最大公共节点数。
样例输入
Copy
样例1:
3 2
1 1
1 2 3
2 3 3

样例2:
4 1
1 2 3
1 2 3
样例输出
Copy
样例1:
2
3

样例2:
2

提示

来源

[提交][状态]