这两天做了一下NOI2014的题目,虽然分数并不理想,但暴露出的问题是挺重要的。
总体来说,这两天的题目都不算太难。
【Day 1】
起床困难综合症:给定初始值x0的取值范围,问经过一系列的位运算后,求得出来的答案的最大值。
考察的算法是二进制运算的位独立性质,以及高位更优性。
显然由于二进制下各位运算是独立的,那么我们每一位取0或取1各模拟一次操作,取最大值。
因为有对初始值取值范围的限制,那么从高位到低位贪心地选1,保证初始值不超过取值范围就可以了。
魔法森林:给定一幅无向图,边上有两个权值ai和bi,选定两个值A和B,一条边可以通过当且仅当A>=ai且B>=bi,问A+B至少为多少时,存在一条从点1到点n的路径。
考察的算法是动态树。
从小到大枚举A,那么随着A的增大,会有新的边加入图中。我们要做的是维护从1到n的路径上bi的最大值最小。这大致上就是一个动态最小生成树的模型。我们需要一个数据结构支持(1)改变树的形态,(2)查询路径上边权最大值。那么用动态树可以在O(log n)时间内解决这两个问题。(关于动态树的总结之后贴)