思路
大法师 DFS 裸题。用二维数组存储二叉树, 存储左儿子, 存储右儿子, 代表深度,也就是 Bessie 走了多少条小径。
代码
#include <iostream>
#include <vector>
using namespace std;
int n, s, t[1001][2]
void dfs(int u, int d){
if (!u){ // 如果是草地则结束搜索并更新全局最大值
s = max(s, d);
return;
}
dfs(t[u][0], d + 1); // 搜索左儿子
dfs(t[u][1], d + 1); // 搜索右儿子
}
int main(){
cin >> n;
for (int i = 1;i < n;i ++) cin >> s, cin >> t[s][0] >> t[s][1]; // 输入编号并存图
s = 0; // 节省一个变量……
dfs(1, 0); // 一开始是在 1 号节点,走了 0 条小径
cout << s;
}