给定一棵包含N个节点的无根树,节点编号1~N。其中每个节点都具有一个权值,第i个节点的权值是Ai。
小Hi希望你能找到树上的一条最长路径,满足沿着路径经过的节点的权值序列恰好构成等差数列。
Input
第一行包含一个整数N。
第二行包含N个整数A1, A2, ... AN。
以下N-1行,每行包含两个整数U和V,代表节点U和V之间有一条边相连。
对于50%的数据,1 ≤ N ≤ 1000
对于100%的数据,1 ≤ N ≤ 100000, 0 ≤ Ai ≤ 100000, 1 ≤ U, V ≤ N
Output
最长等差数列路径的长度
Sample Input
7 3 2 4 5 6 7 5 1 2 1 3 2 7 3 4 3 5 3 6
Sample Output
4
主要思路:
这道题目难度不大。但在模拟赛的时候由于第二道模拟题肝不出来,看这题也没有想法。
首先,在每个节点的时候,如果其子树上的一条最长路径经过这个节点,则要么这个节点在端点上,要么这个节点在这个路径当中。用dp[x][j]+1(由于数列最短应该为1,而初始值为0,要更新会使代码更麻烦,不如直接不加,引用时+1就可以了)来表示以x为端点在其子树上差为j的数列最长有多长。
因此每次ans都要用dp[x][j]