题解
2026-01-24 10:23:06
发布于:浙江
4阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int MAX_NODE = 1000; // 因为P≤1000,分岔节点最大为P-1≤999
// 存储每个分岔节点的两个子节点,node[cnt][0]是D1,node[cnt][1]是D2
int node[MAX_NODE + 1][2];
int max_path = 0; // 记录最长路径的小径数量
// 深度优先搜索,cur_node是当前所在分岔节点,current_len是当前已走的小径数量
void dfs(int cur_node, int current_len) {
// 遍历当前节点的两个子节点
for (int i = 0; i < 2; ++i) {
int next_node = node[cur_node][i];
if (next_node == 0) {
// 到达牧场,更新最长路径(当前长度+1,因为要走到牧场需要多走一条小径)
max_path = max(max_path, current_len + 1);
} else {
// 继续遍历下一个分岔节点,路径长度+1
dfs(next_node, current_len + 1);
}
}
}
int main()
{
int P;
cin >> P;
for (int i = 0; i < P; ++i)
{
int Cn, D1, D2;
cin >> Cn >> D1 >> D2;
node[Cn][0] = D1;
node[Cn][1] = D2;
}
dfs(1, 0);
cout << max_path << endl;
return 0;
}
这里空空如也





有帮助,赞一个