先对树任意做轻重链剖分。
然后设势函数
w
w
w为同时是重边与虚边的边数。
势函数的初值是
O
(
n
)
O(n)
O(n)的。
考虑任意一次access(x)的复杂度,与其到根的虚边数量线性相关。
这些虚边会变成实边。
其中的轻边个数是
O
(
log
n
)
O(\log n)
O(logn),这一部分的复杂度分析完毕。
其中的重边总数就是势函数,并且每花费一的时间势函数会相应减小,因此时间复杂度是势函数总和。
接下来分析势函数的变化。
考虑重边变成虚边的次数,要想总势能变化,必然有一条与他相同父亲的轻边变成实边。
而轻边变成实边的总量不会超过
O
(
n
log
n
)
O(n \log n)
O(nlogn)。因此势能总和也不会超过
O
(
n
log
n
)
O(n \log n)
O(nlogn)。