P14215 [COI 2010] 家族 / LOZA
题目背景
译自 [COI 2010 T3](https://hsin.hr/hio2010/zadaci/)。
题目描述
南极的科学家发现了一种新生物!他们获取了一个样本到实验室进行繁殖。
他们很快注意到这种生物经常繁殖而且是单亲繁殖的。但每个个体最多繁殖两次,之后就会失去繁殖能力。
实验室中这种生物的个体数量迅速增加,需要绘制一份家谱。
他们打算把家谱画成如下的一棵树:
家谱以字符图形式表示,名字写在用符号 `-`、`|` 和 `o` 组成一个框内。框的上下边的中点用 `+` 标出。如果框的长度是偶数,那么 `+` 会标在两个中间位置的靠左一个。
:::align{center}
```
o--+--o o----+----o o-+--o
|anton| |anamarija| |pero|
o--+--o o----+----o o-+--o
```
:::
这些框会用一些边连起来。一组边可以将两个或多个盒子的 `+` 符号给连起来,父代的框在子代的上方。框和边都不能互相重叠。
:::align{center}
```
+ + +
| | |
o o---o---o o-----o-----o
| | | | |
+ + + + +
```
:::
如果一个父代生物只有一个子代,那么我们用最左侧的点到点的边把他们连起来。如果有两个子代,那么我们用有分支的边,**年长的子代生物在左侧,年幼的在右侧**。
分支的边可以在水平方向上无限伸长,但是要保证左右两侧的 `-` 字符是一样多的,但是**不能竖直伸长**。
别着急,你不用把这棵树真的画出来。你只需要求出来最少需要多少个字符就可以画出这样的树。**不计空格**,只计算 `-`、`|`、`+`、`o` 和它们的名字所需要的字符。
输入格式
第一行一个整数 $N$ $(1 \le N \le 300\ 000)$,表示实验室中的生物总数。
生物按照出生的顺序从 $1$ 到 $N$ 编号,最年长的是 $1$,最年幼的是 $N$。
接下来的 $N$ 行按照编号顺序给出了一个生物的信息。每一个生物都有如下两个信息:
- 名字:一个由不超过 $20$ 个小写英文字母组成的字符串。
- 亲代:一个整数,表示该生物的亲代的编号(第一个生物没有输入这个信息)。
输出格式
一行一个整数,表示最少需要多少个字符可以画下家谱。
说明/提示
```
o-+--o
|adam|
o-+--o
|
o--o--o
| |
o-+--oo-+--o
|kain||abel|
o-+--oo-+--o
```
```
o--+--o
|anton|
o--+--o
|
o------------o------------o
| |
o-+-o o-+--o
|ana| |luka|
o-+-o o-+--o
| |
o-------o-------o o--o--o
| | | |
o-+-o o--+--o o-+-oo--+--o
|mia| |lovro| |tea||jakov|
o-+-o o--+--o o-+-oo--+--o
| | |
o-----o-----o o o-----o-----o
| | | | |
o----+----o o----+----o o--+--oo----+-----o o---+---o
|anamarija| |eustahije| |lovro||semiramida| |dominik|
o----+----o o----+----o o--+--oo----+-----o o---+---o
```
可以数出字符数分别是 $64$ 和 $371$ 个。
对于 $50\%$ 的数据,有 $N < 300$。
对于 $75\%$ 的数据,有 $N < 3000$。