# | User | Rating |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Name |
---|
Hello, firstly thanks for the awesome episode.
I had a query. Can you tell me if the following is correct which I've understood from this episode ?
Dominator tree can be constructed using LCA. To do that, we first topologically sort the nodes in the DAG. Then we process them sequentially. While processing a node, we find out the LCA of the set of nodes who have a direct edge to the current node. Then we can safely say that this LCA is the immediate dominator of the current node. So we simply add the current node as a child of the LCA we've found in the dominator tree and add the sparse table row for the current node in O(logn). Thus we can construct the whole tree.
I think the time complexity would be O(ElogV) as we are finding out LCA once for every edge.
Are the idea I described above and the time complexity analysis correct ?
Yes! :)
Thanks. Also is there any other way to build a dominator tree which is more efficient ? I've seen that some people use another method involving DSU but it seemed pretty complicated at first glance.
Yes. That algorithm works even for graphs with cycles. It is close to linear in runtime. The LCA method only works for DAGs but is much simpler conceptually. It's only a bit slower but the binary lifting table on the dominator tree is sometimes useful for solving other subproblems.
I will do a future episode on the more power algorithm if there is interest. :)
That would be really great. :D