Məsələnin müəllifi: | Taras Derkach |
Hazırlayan: | Taras Derkach |
İzah: | Taras Derkach |
Həll
Mərkəzi olaraq seçdiyimiz təpəsini fiksə edək.
Bundan sonra təpəsindən məsafəsi tam olaraq olan bütün təpələr silinir.
Görək hansı bağlı komponentlər qalır.
Birinci komponent həmişə təpəsinin özünü və onun bütün qonşularını ehtiva edir. Onun cəmini center_v kimi işarə edək:
Digər komponentlər yalnız silinmiş təpələrin arxasında yarana bilər.
Qoy təpəsi təpəsinin qonşusu olsun, isə təpəsinin qonşusu olsun və x \ne v.
Onda təpəsi təpəsindən tam olaraq məsafədə yerləşir, buna görə də silinir. silindikdən sonra onun digər qonşularının arxasında yerləşən komponentlər qala bilər.
Deməli, bizə belə bir qiyməti tez tapmaq lazımdır:
əgər kənarı varsa, bu kənarı sildikdə təpəsi tərəfində yerləşən komponentin cəmi nə qədərdir.
Bu cəmi side(x,y) kimi işarə edək.
Əgər ağacı təpəsində kökləndirsək, side(x,y) qiymətini alt ağac cəmləri ilə asanlıqla hesablamaq olar:
əgər təpəsi təpəsinin övladıdırsa, onda side(x,y) = subtree_y;
əks halda, side(x,y) = total - subtree_x.
Hər təpəsi üçün bütün qonşular üzrə side(x,y) qiymətlərinin içindən iki ən kiçik və iki ən böyük qiyməti saxlayacağıq.
Niyə iki? Çünki bəzən ən yaxşı qiyməti götürmək lazımdır, amma konkret bir istiqaməti qadağan etmək lazımdır. Məsələn, silinmiş təpəsinə baxanda təpəsinə geri gedən istiqaməti götürmək olmaz, çünki təpəsinə həmin istiqamətdən gəlmişik.
Sonra hər təpəsi üçün təpəsinin hansısa qonşusu silindikdən sonra yarana bilən komponentlərin ən kiçik və ən böyük cəmlərini saxlayacağıq.
Başqa sözlə, təpəsinin hər qonşusu üçün təpəsinin arxasındakı ən yaxşı komponenti götürürük, amma təpəsinə geri gedən istiqaməti götürmürük.
Bu hazırlıqdan sonra konkret mərkəzi təpəsi üçün cavabı tez tapmaq olar.
Əvvəlcə center_v cəminə malik komponentimiz var.
Sonra təpəsinin hər qonşusu üçün təpəsinin arxasında yerləşən təpələrdən yarana biləcək ən kiçik və ən böyük komponenti götürürük. Bu zaman təpəsinə geri gedən istiqaməti qadağan etmək lazımdır.
Tapılan bütün komponentlər arasında minimum və maksimum cəmi tapırıq. təpəsi üçün kontrast belə olur:
Cavab bütün təpələri üzrə bu qiymətin maksimumudur.
Nümunə
Birinci nümunədə optimal olaraq v = 4 təpəsini seçmək olar.
Onda təpəsi ondan tam olaraq məsafədə yerləşir, buna görə də silinir.
Silindikdən sonra iki bağlı komponent qalır:
cəmi olan komponenti;
cəmi 3 + 4 + 5 = 12 olan \{3,4,5\} komponenti.
Beləliklə, kontrast belə olur:
Mürəkkəblik
Alt ağac cəmlərini bir dəfə hesablayırıq, bundan sonra hər təpə üçün onun qonşularına baxırıq.
Hər kənar yalnız sabit sayda dəfə emal olunur.
Buna görə həllin mürəkkəbliyi -dir.