Изменения

Перейти к: навигация, поиск

Link-Cut Tree

276 байт добавлено, 21:31, 10 июня 2014
link(v, u)
Если <tex>v</tex> - корень, а <tex>u</tex> - вершина в другом дереве, то <tex>link(v, u)</tex> соединяет два дерева добавлением ребра <tex>(v, u)</tex>, причем <tex>u</tex> становится родителем <tex>v</tex>.
'''function'''link(v: '''tree''', u): '''tree'''):
expose(v) <font color=green> //теперь v - корень в splay-дереве пути и не имеет левого ребенка(так как ключ равен глубине в link-cut дереве)</font>
expose(u)
Δw<tex>\vartriangle</tex>w(u) -= Δw<tex>\vartriangle</tex>w(v) <font color=green>//чтобы сделать u родителем v в link-cut дереве 1. делаем путь, содержащий u, левым ребенком v в splay-дереве</font> parent(u) <- tex>\leftarrow</tex> v <font color=green>// 2. обновляем Δw<tex>\vartriangle</tex>w, Δmin<tex>\vartriangle</tex>min</font> left(v) <- tex>\leftarrow</tex> u Δmin<tex>\vartriangle</tex>min(v) <- tex>\leftarrow</tex> min{0, Δmin<tex>\vartriangle</tex>min(u) + Δw<tex>\vartriangle</tex>w(u), Δmin<tex>\vartriangle</tex>min(right(v)) + Δw<tex>\vartriangle</tex>w((right(v)))}
===cut(v)===
234
правки

Навигация