Hi CodeForces!
Last week I streamed about LCA (least common ancestor), Segment trees, and Heavy Light Decomposition. You can check out the stream here. If you already know one or more of those concepts, you can jump to the other concepts.
# | User | Rating |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3831 |
3 | Radewoosh | 3646 |
4 | jqdai0815 | 3620 |
4 | Benq | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | gamegame | 3386 |
10 | ksun48 | 3373 |
# | User | Contrib. |
---|---|---|
1 | cry | 164 |
1 | maomao90 | 164 |
3 | Um_nik | 163 |
4 | atcoder_official | 160 |
5 | -is-this-fft- | 158 |
6 | awoo | 157 |
7 | adamant | 156 |
8 | TheScrasse | 154 |
8 | nor | 154 |
10 | Dominater069 | 153 |
Hi CodeForces!
Last week I streamed about LCA (least common ancestor), Segment trees, and Heavy Light Decomposition. You can check out the stream here. If you already know one or more of those concepts, you can jump to the other concepts.
Name |
---|
hey , i couldn't understood , HLD . i understood st and binary lifting .
Which parts did you not understand? I can try to explain it better.
how to apply HLD to a particular problem , where to use . and its variations. + how can we seperate heavy and light edges
Think of HLD as a segment tree on a tree. Let's say that each edge on a tree has a value and you want to query the min/max/sum of the values on a path in the tree.
To separate heavy and light edges, we start at the root. The edge leading into subtree with the most nodes is heavy and all the other edges going out of the root are light. Repeat at every node. There should not be two adjacent light edges. Two adjacent heavy edges means that they are part of the same segtree.
so , for each heavy edge do we have to build a new segment tree or only one segment tree can cover all heavy edges and one segment tree for light edges
One segment tree for each set of connected heavy edges and one segment tree for each light edge.
ok . what to query and how to query ? + do u have implementation of HLD which you frequently use in contest . can you share it with me .
What to query depends on the problem you are trying to solve.
Maybe you want to find the maximum value node on the path between some 2 nodes. Then you would query for the maximum value in the segment trees you encounter, and choose the maximum one.
if we want to query maximum value on node bw any any nodes in a path why not simply use lca with binary lifting
HLD can also support updates in O(log N). Binary lifting can't.
If you relabel the nodes so that all the nodes in a chain are next to each other (dfs order), you can use one segment tree for the whole tree. makes the implementation easier imo.
In my opinion, this was one of the best from your channel. Really enjoyed it. Thank you!