2022.7.26NOIP测试
T1.树染色问题
思路:
先缩点,在新的树上一层一层染色,为了让层数最少,把直径中点作为根节点。
然后直径长度除以二既可以了。
T2.Multiset
思路:
与整体二分相似,先按位确定答案范围。对每个值的个数枚举并检验。用一个\(set\)存答案的范围,每一个\(node\)有\(ll,lr,rl,rr\)四种变量,存储\(l,r\)的范围。
每次确定完数值个数后,在两个集合之间取交集。
T3.最优化问题
将输入的序列按数值大小排序,然后按照数值从小到大加入
维护删 $1..K $个数以后的最大答案 \(c[1..K]\)
当加入一个数 \(ax\) 时,显然它前面必须删 $ax − x $个数
那么如果前面删的数字个数小于等于\(ax − x\) 的都可以转移到$ c[ax − x]$
然后如果前面删的数不超过$ K$ 个而且后面的全部删除可以删满 K 个的话就更新
答案
需要在$ c $数组中修改一个数,查询前缀最小值