At a second glance it didn't work as well as I expected. In fact, I get quite weird results when I try to implement your code into a program that takes an entire file with > 35,000 trees, each one occupying one line of values. Here are the first lines of the revised code:
use strict;
use warnings;
use List::Util qw/max/;
my %graph;
while (<>) {
chomp;
while ($_ =~ /(\d+)\s+->\s(\d+)/g) {
...etc.
Then I wish to print each tree depth on a separate line of output until EOF.
It looks good at the beginning, but there seems to be an accumulation of values in some variable making the output lines growing into unrealistic figures. Do you have any solution to this?