度度熊给定一棵树,树上的第个节点有点权。请你找出一条最长的路径,使得从沿着唯一路径走到的途中,点权不断严格递增。
换句话说,设路径为,则需要满足。输出最长满足条件的路径的长度。
第一行树的节点个数 , 接下来一行个数字,表示每个点的点权。接下来行,每行两个数代表树上的一条边,连接点。.
一行一个数字表示答案,即最长的长度。
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()