Single pass over descriptions to build node map + child set. Root found in O(n) scan. Total O(n) time, O(n) space for the map.
Start: empty node map and child set. We will scan each description once.