其实只需找到最长的上级关系链即可得出答案

对于所有非-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;
}