【CODECHEF】Children Trips(分塊)

在這裏插入圖片描述
在這裏插入圖片描述
主要的操作是:每一天走到最遠能夠走到的休息區
確實一開始沒有想到是分塊,只是覺得 1 < = d < = 2 1<=d<=2 有點東西,但是沒有搞出來。
其實也可以說是分類討論。
首先肯定都是求出 l c a lca ,兩點都向 l c a lca 跳。
1. P > s q r t ( n ) 1.P>sqrt(n)
這樣的P有一個特點,就是他每天至少是要走sqrt(n)公里的,直接暴力跳 O ( n s q r t ( n ) ) O(nsqrt(n)) ,可以寫個 j u m p ( ) jump () 直接跳即可
2. P < = s q r t ( n ) 2.P<=sqrt(n)
這樣的P也有一個特點,至多是 s q r t ( n ) sqrt(n) 種,排序後,關於每一種做一個倍增的數組,用倍增跳即可。

在最後做一個收尾的處理即可。(看一下兩點到 l c a lca 的距離之和是否大於P)