
USACO 2012 November Contest, Gold
Problem 3. Balanced Trees
Contest has ended.

Log in to allow submissions in analysis mode
Problem 3: Balanced Trees [Brian Dean, 2012]
Fascinated by his experience with balanced parentheses so far, Farmer John
is curious if you can help him solve one final problem. As it turns out,
FJ's farm is in the shape of a giant tree of N pastures (1 <= N <=
40,000), each of which he has labeled with either ( or ). For example:
'('--'('--')'--'('--')'
| |
')' ')'--'('--'('
| |
')' '('--')'--')'--')'--'('
Recall that since his farm is a tree, this means that certain pairs of
pastures are connected by corridors so that there is one unique path
between any given pair of pastures. FJ believes that some of these paths
represent balanced strings of parentheses. In particular, he would like to
know, among all such balanced strings represented by paths through the
tree, what is the maximum nesting depth one can find. The nesting depth of
a balanced string of parentheses is the maximum, over all prefixes of the
string, of the excess number of ('s within the prefix. For example, the string
()()() has nesting depth 1, but the string ((()))() has nesting depth 3, as
we can see clearly if we count excess ('s for every prefix of the string:
((()))()
12321010
For the example farm above, the deepest string is ((())) with a depth of 3,
and can be obtained by taking the path from A to B below:
'('--'('--')'--'('--')'
| |
')' ')'--'('--'(' < A
| |
')' '('--')'--')'--')'--'('
^C ^B
Note that this is different than the longest balanced string; for instance
(())(()), starting at A and ending at C, has length 8.
Your task is to output the nesting depth of the deepest balanced path in
the tree.
PROBLEM NAME: btree
INPUT FORMAT:
* Line 1: A single integer N, the number of nodes in the tree.
* Lines 2..N: Line i+1: A single integer p_(i+1) (1 <= p_(i+1) <= i),
denoting an edge between nodes i+1 and p_{i+1} in the tree.
* Lines N+1..2N: Line N+i: Either ( or ), the label of node i.
SAMPLE INPUT (file btree.in):
15
1
2
1
4
4
6
7
5
9
9
11
12
13
14
(
)
)
(
)
)
(
)
(
(
(
)
)
)
(
INPUT DETAILS:
This is the example from the problem description, with the following node
labels:
1'('--4'('--6')'--7'('--8')'
| |
2')' 5')'--9'('--10'('
| |
3')' 11'('--12')'--13')'--14')'--15'('
OUTPUT FORMAT:
* Line 1: A single integer, giving the maximum nesting depth of a
balanced path.
SAMPLE OUTPUT (file btree.out):
3
Contest has ended. No further submissions allowed.