LGR2021五月 題解

2022-09-06 04:03:09 字數 1508 閱讀 5393

洛谷2021五月月賽題解

摸幾下發現對於某乙個 k,s 只要在乙個區間內,他總是能被湊出來的,考慮這個區間左右端點,不過就是考慮最大值和最小值,可以想到最小值就是 [1,k] 的和,最大值就是 [n-k+1,n] 的和

還不會有 1 為根節點,那麼我們可以 o(n) 獲得每一層的節點

然後考慮一層一層的搞,設相鄰兩層的節點數為 $n_i$ 和 $n_j$,我們有乙個很顯然的想法就是對於第 i 層的每乙個節點,我們遍歷所有的 j 層節點,並且用詢問1搞出距離,這樣距離為 1 的點就是他的兒子,複雜度 $o(n_in_j)$

可以發現這種做法可以被卡到 $o(n^2)$

考慮詢問2來做這題

對於每一層的每乙個節點,都詢問他子樹的節點。在這個點集裡,位於下一層的節點就是他的兒子。那麼複雜度是多少,我們可以發現在同一層裡的詢問是互不相交的,所以假設樹有 k 層,總複雜度是 $o(kn)$

後者做法有乙個好處,就是不管某一層有多少個點,他處理一層的複雜度總是 o(n)

那麼兩者結合一下,當用前者做法優於後者時,用前者做法,否則用後者做法,可以發現處理一層的複雜度是 $o(\min(n_in_j,n))$

那麼總複雜度是多少?考慮最壞情況,每一層都是 $o(\sqrt n)$ 個節點,那麼每一層都會被卡滿到 o(n),但是我們這時只有 $o(\sqrt n)$ 層

所以總複雜度 $o(n\sqrt n)$

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 5010

#define inf 0x7fffffff

#define ll long longstd::vector

depset[inf];

std::vector

q;intn;

intmaxdep;

intfa[inf], dep[inf];

inline

int querydist(int x, int

y) inline

int querytree(int

x)

return

sz;}

inline

void distfind(int

d) }

}inline

void treefind(int

d) }

}signed main()

for(int i = 1; i < maxdep; i++)

for(auto i: depset[1]) fa[i] = 1

; printf("!

");for(int i = 2; i <= n; i++)

fflush(stdout);

return0;

}

五月槐花香

五一勞動節,帶孩子回老家一趟。從繁華都市來到安靜的鄉村,時空的轉換讓人立刻覺得心曠神怡起來。坐在汽車上放眼望去,到處是綠色的麥田,春風拂面,野花野草,算黃算割的叫聲,一切都那麼生機勃勃。那山 那水 那橋,依舊那樣熟悉。路上碰到村里的熟人,不時的打著招呼。芊芊一路上都很興奮,看到麥田,說 好大的草地啊...

五月的孩子

五月有輕巧的陽光,微風閃爍細細的光澤。花事一波未平,一波又起。燕子 樹鶯 喜鵲且歌且舞。小雨一場一場地下,青青草尖 片片綠葉都很認真地生長。空氣中有蓬勃的律動。男人抱著自己的小小孩。小小孩手指向頭頂的樹葉,男人伸手摘下一片綠葉。可他不滿意,還是伊伊呀呀仰頭看著樹上。不知道他心中理想的葉子是什麼標準的...

五月的行走

下了車,陽光像電影的乙個降格鏡頭,慢慢的融入,滲透。在城市。不管你有多麼柔軟的內心,人和砼的對峙始終都蘊含著繁華和寂寞的落差。在高大的建築下面行走,仰望所帶來的假象和夢想一樣。我總是在特定的時間出現在這條馬路上,行走對我來說總是最值得愜意的事情。我喜歡在行走的路上看見人類,寶馬車的呼嘯以及建築的破舊...