Codeforces Round #199 (Div. 2)

C:  可以避免用浮点

D:推荐逐格递推法,想学的话去http://blog.csdn.net/crazy_ac/article/details/9819191

E:Qtree 5的弱化版,顺便问一句。。。CF真是没题出了么??

这个题由于是弱化版,没有向qtree 5那样对某个点的颜色取反,所以有一种简易的lct写法,我是跟小水大神学的。。学会了lct,我的splay写法也可以改观很多了

这个题用lct来做的话需要维护两个信息

1:某个点子树内的最浅的红点的深度

2:splay的子树中最小的ans 

ans的值是这么算得,因为两个点之间的距离是dep[u] + dep[v] - 2 * dep[lca];

所以如果v是红点,我们只需要维护一个dep[v]-2*dep[lca]最小值即可

另外,pushdown的时候需要O(1)维护子树的ans值,仔细想一下,最有可能更新答案的肯定是当前链中深度最大的点,因为一开始要更新的点肯定是在链的最底部的

每次更新一个点实际上就是更新了所有的父亲节点方向的信息,只管access到根,然后放下去一个标记即可*_*

done!

代码见

https://github.com/becauseofyou/Contests/tree/master/Codeforces/CF_199div2

 

你可能感兴趣的:(codeforces)