其实只需找到最长的上级关系链即可得出答案
对于所有非-1的值都通过递归确定上级数 其中上级数目最多的就是上级关系链最长的 也就是答案(员工+员工的上级总数)
#include <bits/stdc++.h>
using namespace std;
int a,cnt=1;
vector<int> cc(2001);
void dfs(int x){
if(cc[x]==-1){
cnt++;
return;
}
dfs(cc[x]);
cnt++;
return;
}
int main() {
cin>>a;
for(int i=1;i<=a;i++){
cin>>cc[i];
}
int max=1;
for(int i=1;i<=a;i++){
if(cc[i]==-1)continue;
cnt=1;
dfs(cc[i]);
if(cnt>max){
max=cnt;
}
}
cout<<max;
}
使用C语言实现就是
#include <stdio.h>
#include <stdlib.h>
int a, cnt = 1;
int cc[2001];
void dfs(int x) {
if (cc[x] == -1) {
cnt++;
return;
}
dfs(cc[x]);
cnt++;
return;
}
int main() {
scanf("%d", &a);
for (int i = 1; i <= a; i++) {
scanf("%d", &cc[i]);
}
int maxx = 1;
for (int i = 1; i <= a; i++) {
if (cc[i] == -1) continue;
cnt = 1;
dfs(cc[i]);
if (cnt > maxx) {
maxx = cnt;
}
}
printf("%d\n", maxx);
return 0;
}

京公网安备 11010502036488号