[TJOI2011] 树的序
前言
终于调完那弱智矩快了家人们
思路
然后也是再一次复习一下键值和优先级
我们发现键值是确定其横向的位置, 然后优先级用来调整高度
本题中给定了键值序列, 考虑哪种键序列可以产生相同的二叉查找树, 找到其中字典序最小的那一个
考虑挖一下性质
按照原序列建出来之后, 容易发现对于一个节点, 整体调动一下其左右儿子的插入顺序是不影响最终结果的
我们先考虑应该怎么建树, 这个题中, 虽然没有明说优先级, 但是我们可以令优先级为插入顺序, 因为笛卡尔书不管怎么样都至少应当确定一个为有序, 然后正常建树即可
现在问题转化成, 如何选择插入顺序使得字典序能够做到最小
好像可以贪心的在树上走最小值即可, 非常的简单, 让我们看看 \(\rm{TJ}\) 检查正确性
\(\rm{whats \ app}\) 是对的, 自己做对了蓝!!!!
实现
很简单啦, 特别的, 找根的方法
for(int i = 1; i <= n; i++) {
vis[ls[i]] = 1;
vis[rs[i]] = 1;
}
这样没有 \(vis\) 过的就是根啦
代码略掉了
总结
善于找到题目性质, 多画画图会出来的

浙公网安备 33010602011771号