How to solve this problem from POI? It simply states: Given a tree find a triplet of nodes (a,b,c) such that distance between each other is same!
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | awoo | 154 |
8 | Dominater069 | 154 |
10 | luogu_official | 150 |
How to solve this problem from POI? It simply states: Given a tree find a triplet of nodes (a,b,c) such that distance between each other is same!
Name |
---|
That's not what the problem is asking. It asks to compute the number of such triplets.
You can prove that for any such triplet, there must exist another vertex L which is between them in the tree (i.e., L-A, L-B, L-C forms a star-like shape), and the distances L-A, L-B, L-C must be equal. So you loop over every vertex L, then run DFS counting vertices at each distance. Gives O(n^2) runtime.
Won't that overcount? Like in the sample itself, the distance of nodes {4, 6, 7} are all 2 from the node 2, so we count them once, but then the nodes {4, 6, 7} are also at distance 1 from the node 5 and so we count them again. How do we account for this?
Right. You should only count triples which are in different branches of the tree going out of L. (Note that there may be Ω(n) of these branches, so you need to do that in a non-slow way.)
Check out this