U469634 百年树人

题目背景

> 十年树木,百年树人,~~千年二叉树与人~~

题目描述

同学们学习了二叉树的相关知识,于是自发组织了一个活动:他们以每个人为一个节点,要构成一个二叉树。 组织委员小 Y 一共会发出不超过 $10^5$ 条指令,每次他会说两个同学的名字 $a$ 和 $b$,表示将同学 $b$ 安排成同学 $a$ 的子节点。他保证同学们能构成一个合法的二叉树。 隔壁班的同学小 C 听到了他的话,但是不知道同学们到底排成了什么样的队形。于是他找到了你们班的同学小 Z,想问问他。但是小 Z 并不想直接告诉他答案,他只会告诉小 C 同学们排成的二叉树深度,让小 C 思考最多可能有多少位同学。 如果你是小 C,你会算吗? *** 今天小 C 在一篇 [CSDN 博客](https://blog.csdn.net/m0_56494923/article/details/123239292)上学习了 map 容器的用法。这是他的记录: > STL 中的 map 是一个存储键值对并自动排序的容器,跟 Python 里的字典很像。map 的定义方法是:`mapp`,其中第一个 type 是键的类型,第二个 type 是值的类型。 > > 一些关于 map 的函数: > > - `map[a]=b`:将 map 中键为 a 的值设为 b。 > - `map.count(name)` 可以查询 map 中 name 键对应的值是否定义过。 > - `map.size()` 可以查询 map 中的元素数。

输入格式

不超过 $10^5$ 行字符串,每行两个分别是 $a$ 和 $b$,含义如题目描述。 每个学生的名字长度不超过 $100$,并且只包含字母。 小 Y 有时对队形不满意,他可以使一个已经有父节点的同学改变父节点。

输出格式

一行一个整数,表示你根据小 C 已知的条件推算最多可以有的同学数量。

说明/提示

### 样例解释 #### #1 同学们排成的队形如下: ![](https://i2.imgs.ovh/d/BQACAgUAAx0EUvSR8wACLexmxJAh1SNxzEpLgi0jc0L2H6pqMwACdxQAAl3YIFbpgrIHuflaNDUE) 而此时二叉树深度为 $3$,没有方法能使深度为 $3$ 的二叉树拥有更多的节点。 #### #2 `hhhh` 是 `hhh` 的子节点,我们可以为 `hhh` 添加另一个子节点,二叉树的深度不会变。因此小 C 计算的结果会是 $3$。 ### 数据范围与约定 设同学们构成的二叉树深度为 $len$,则有 $2\le len\le31$。 有 $50\%$ 的得分点平分 $50$ 分; 对于另 $50\%$ 的得分点,当你通过了这部分所有的测试数据,你可以得到 $50$ 分。