GESP编程共123题,本题是整站第1455题,已经有人完成了本题,加油!
小杨有一棵包含 n 个节点的树,其中节点的编号从 1 到 n。节点 i 的权值为 ai。
小杨可以选择一个初始节点引燃,每个燃烧的节点会将其相邻节点中权值严格小于自身权值的在节点间扩散直到不会有新的节点被引燃。
小杨想知道在合理选择初始节点的情况下,最多可以燃烧多少个节点。
第一行包含一个正整数 n,表示节点数量。
第二行包含 n 个正整数 a1,a2,…,an,代表节点权值。
之后 n−1 行,每行包含两个正整数 ui,vi,代表存在一条连接节点 ui 和 vi 的边。
输出一个正整数,代表最多燃烧的节点个数。
输入 #1
5 6 2 3 4 5 1 2 2 3 2 5 1 4
输出 #1
3
子任务编号 | 数据点占比 | n |
---|---|---|
1 | 20% | ≤10 |
2 | 20% | ≤100 |
3 | 60% | ≤10^5 |
对于全部数据,保证有 1≤n≤10^5,1≤ai≤10^6。
【题目大意】有n个节点的树(不一定是二叉树),节点编号是1到n,每个节点有权值ai。根节点不确定,该树是无根树(有根树的根节点确定)。从某个节点出发,只要相邻节点权值小于该节点,火焰会继续传递下去。
【考纲知识点】建树知识、递归知识
【解题思路】以任意一节点为根,将无根树转换为有根树,使用 down[x] 表示 x 向它的子节点方向引燃能够引燃多少节点,sum[x] 表示 x 向它的父节点方向引燃,能够引燃多少节点。以 dfs 序遍历树,首先求出所有节点的 down[x]。 以 dfs 序第二次遍历树,对于每个节点 x,若其能引燃其父节点 fa,即 a[x] > a[fa],则 sum[x] += sum[fa] + down[fa]。
本题只是数据之间比大小,根据数据范围,结果是int类型即可。
参考程序
本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。