本题给的是一棵树。 然后找子孙中能力值大于父节点并且忠诚最高的。
由于树的结构不好搞线段树,所以要映射到一个连续序列上搞,把这个结点的子树都能映射到一个连续区间上就好办了。
很常见的套路就是DFS时间戳,记录进入结点的时间戳和出结点的时间戳,两个时间戳之间的都是这个结点的子孙结点了。
而我们要找能力值大于父节点的还得是忠诚最高的。两个限制。
那就进行排序,按能力值从高到低排,然后按排序后的顺序,对每个结点,先查询子树中的最大忠诚的结点,然后再更新。这样就能保证查到的一定是能力值大于父节点的结点了
并且题目告诉我们忠诚值互不相同,那么就省去了我们一些麻烦了。因为每个忠诚值必然对应一个唯一的序号,那么开个 map映射一下好了。
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
作者:sdj222555