Изменения

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

Метод двоичного подъёма

180 байт добавлено, 18:21, 5 июня 2014
Псевдокод
==Псевдокод==
<bigcode> preprocess(): '''int[]''' p := dfs(0) '''for ''' i := 1 .. '''to''' n dp[i][0] := p[i] '''for ''' j := 1 .. '''to''' log(n) '''for ''' i := 1 .. '''to''' n dp[i][j] := dp[dp[i][j - 1]][j - 1]
lca('''int''' v, '''int''' u): '''if (''' d[v] > d[u]) swap(v, u) '''for ''' i := log(n) .. '''downto''' 0 '''if (''' d[u] - d[v] >= <tex> \geqslant 2 ^ i </tex>) u := dp[u][i] '''if (''' v == u) '''return ''' v '''for ''' i := log(n) .. '''downto''' 0 '''if (''' dp[v][i] <> != dp[u][i]) v := dp[v][i] u := dp[u][i] '''return ''' p[v]</bigcode>
==Источники информации==
120
правок

Навигация