1. 程式人生 > >【二分答案+LCA】The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online B.Red Black Tree

【二分答案+LCA】The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online B.Red Black Tree

The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online B.Red Black Tree

1. 題意

一棵樹有n個節點n-1條邊,跟為1,有邊權。m個節點是紅色,其他是黑色。 有q此查詢,每次查詢有k個點組成的集合,設d[x]表示當前節點到最近紅點父節點的距離。如果x是紅點,d[x]=0。可以又一次機會把樹上一個節點變成紅色,使得集合中的d[x]變小,問你集合中的節點d[x]最小的最大值是多少?

2. 思路

可以用一次dfs預處理出所有的d[x],用於判斷二分答案是否滿足要求。 然後採用ST表求LCA的思路,在O(1)的複雜度求出LCA(x,y)。 對於滿足的二分答案的,可以捨棄,我們考慮不滿足的,求出剩下的所有的公共LCA就是經過最多次的點,把這個點變成紅色。 求公共LCA的方法是求最大的dfn和最小的dfn的LCA,就是公共的LCA。

wating