眼睛网站开发,物流管理网站建设,杨浦做网站公司,重庆网站建设的公司哪家好题目描述 以前有个孩子#xff0c;他分分钟都在碎碎念。不过#xff0c;他的念头之间是有因果关系的。他会在本子里记录每一个念头#xff0c;并用箭头画出这个念头的来源于之前的哪一个念头。翻开这个本子#xff0c;你一定会被互相穿梭的箭头给搅晕#xff0c;现在他希望…题目描述 以前有个孩子他分分钟都在碎碎念。不过他的念头之间是有因果关系的。他会在本子里记录每一个念头并用箭头画出这个念头的来源于之前的哪一个念头。翻开这个本子你一定会被互相穿梭的箭头给搅晕现在他希望你用程序计算出这些念头中最长的一条因果链。 将念头从1到n编号念头i来源于念头from[i]保证from[i] ifrom[i]0表示该念头没有来源念头只是脑袋一抽灵光一现。
样例说明 最长的因果链有 1- 2- 5 (from[5]2,from[2]1,from[1]0) 1- 2- 7 (from[7]2,from[2]1,from[1]0) 3- 4- 6 (from[6]4,from[4]3,from[3]0) 3- 4- 8 (from[8]4,from[4]3,from[3]0)
输入 第一行一个正整数n表示念头的数量
接下来n行依次给出from[1]from[2]…from[n]
数据规模和约定 1 n 1000 输出 共一行一个正整数L表示最长的念头因果链中的念头数量 样例输入
8 0 1 0 3 2 4 2 4
样例输出
3
解题思路 水题
代码如下
#include iostream
using namespace std;
const int N 1010;
int from[N];
int cnt;void dfs(int i) {cnt 1;for (int j from[i]; j; j from[j]) {cnt;}
}int main() {int n;cin n;for (int i 1; i n; i)cin from[i];int ans -1;for (int i 1; i n; i) {dfs(i);if (cnt ans)ans cnt;}cout ans endl;return 0;
}