燃烧


Submit solution

Points: 100
Time limit: 1.0s
Memory limit: 80M

Author:
Problem type
Allowed languages
C, C++

P11378 · \([GESP202412 七级]\) 燃烧

题意概述

给定一棵包含 \(n\) 个节点的无向树(节点编号 \(1\ldots n\)),第 \(i\) 个节点的权值为 \(a_i\)。 你可以任选一个节点作为初始火源点燃;之后火焰按如下规则在树上扩散:

  • 若节点 \(u\) 已点燃,则它会使相邻权值严格小于它的节点 \(v\) 点燃(即 \(a_v<a_u\))。
  • 扩散可以多轮进行,直到没有新的节点被点燃为止。

求:通过最优选择初始节点,最多能点燃多少个节点。


输入格式

  • 第一行:一个整数 \(n\) —— 节点数。
  • 第二行:\(n\) 个整数 \(a_1,a_2,\dots,a_n\) —— 各节点权值。
  • 接下来 \(n-1\) 行:每行两个整数 \(u_i,v_i\),表示在节点 \(u_i\) 与 \(v_i\) 之间有一条无向边。

输出格式

输出一个整数,表示在最优起点下,最终能被点燃的最大节点数


样例

输入

5
6 2 3 4 5
1 2
2 3
2 5
1 4

输出

3

说明与约束

  • \(1\le n\le 10^5\)
  • \(1\le a_i\le 10^6\)
  • 输入保证是一棵树(恰有 \(n-1\) 条无向边)
  • 扩散只允许沿"权值严格下降"的相邻边进行;若两点权值相等则不会触发点燃。

Comments

There are no comments at the moment.