Изменения

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

Link-Cut Tree

12 байт убрано, 16:27, 23 марта 2016
link(v, u)
Если <tex>v</tex> {{---}} корень, а <tex>u</tex> {{---}} вершина в другом дереве, то <tex>\mathrm{link(v, u)}</tex> соединяет два дерева добавлением ребра <tex>(v, u)</tex>, причем <tex>u</tex> становится родителем <tex>v</tex>.
'''treefunction''' link(v: '''tree''', u: '''tree'''):'''tree'''
expose(v) <font color=green> //теперь v {{---}} корень в splay-дереве пути и не имеет левого ребенка(так как ключ равен глубине в link-cut дереве)</font>
expose(u)
<tex>\vartriangle</tex>w(u) -= <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. обновляем <tex>\vartriangle</tex>w, <tex>\vartriangle</tex>min</font> left(v) <tex>\leftarrow=</tex> u <tex>\vartriangle</tex>min(v) <tex>\leftarrow=</tex> min{0, <tex>\vartriangle</tex>min(u) + <tex>\vartriangle</tex>w(u), <tex>\vartriangle</tex>min(right(v)) + <tex>\vartriangle</tex>w((right(v)))}
'''return''' v
Анонимный участник

Навигация