天天看點

BZOJ 2599 [IOI2011]Race【Tree,點分治】

給出N(1 <= N <= 200000)個結點的樹,求長度等于K(1 <= K <= 1000000)的路徑的最小邊數。

點分治,這道題目和POJ 2114很接近,2114是求是否存在長度為K的邊,但是那個K比較大。但是這道題目的K比之小了10倍。

1. 用V[i]表示到目前樹根root的路徑長度為i 時的點(指派為root結點即可),這樣就可以用來判斷兩條到根的路徑長度之和是否等于K:

    結點a的root的距離為i,結點b到root的距離為j,處理完a之後會得到V[i] = root,那麼在處理結點b的時候,如果V[K-j] = root,就說明某一個a和b的路徑長度為K,此時,就可以更新最小邊數了。

2. e[i]表示到目前樹根root的路徑長度為i 時的邊的最小條數。