换句话说,设路径为
第一行树的节点个数, 接下来一行
个数字,表示每个点的点权。接下来
行,每行两个数
代表树上的一条边,连接点
。
.
一行一个数字表示答案,即最长的长度。
5 3 5 5 4 1 1 2 1 3 2 4 2 5
2
4 3 4 1 2 1 2 2 3 2 4
2
树形DP
def solve():
n = int(input())
weights = list(map(int, input().split()))
from collections import defaultdict
edges = defaultdict(list)
for _ in range(n-1):
u, v = map(int, input().split())
edges[u-1].append(v-1)
edges[v-1].append(u-1)
dp = [-1] * n
def helper(root):
if dp[root] != -1:
return dp[root]
res = 1
for nxt in edges[root]:
if weights[root] < weights[nxt]:
res = max(res, 1+helper(nxt))
dp[root] = res
return res
for i in range(n):
helper(i)
print(max(dp))
solve()