2020 ccpc长春 F Strange Memory (树上启发式合并+位运算)
题目
https://codeforces.com/gym/102832/problem/F
题意
给定一个含有n个节点的数,求下式的值。
∑ i = 1 n ∑ j = i + 1 n [ a i ⊕ a j = a l c a ( i , j ) ] ( i ⊕ j ) \sum_{i=1}^n\sum_{j=i+1}^n[a_i⊕a_j=a_{lca(i,j)}](i⊕j) ∑i=1n∑j=i+1n[ai⊕aj=alca(i,j)](i⊕j)
意思大概就是给你两个结点,如果这两个点的权值异或值和最近公共祖先相同,那么答案就加上两个节点下标的异或值。
题解
先讨论下时间复杂度
这题暴力肯定是不行的,首先排除 O ( n 2 ) O(n^2) O(n2)的做法。
那么这个时候就要考虑以下树上启发式合并,那么树上启发式合并的复杂度是多少呢?
首先我们了解,树上启发式合并是把两个集合中,小的集合插入大的集合中。那么每次插入我们都可以保证插入后树的大小是原来的两倍,那么每个点最多能插入多少次呢?也就是 l o g n logn