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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章