为什么我的代码会出现部分测试点出现段错误,我模仿别人的代码,修改了一个函数

img

这是别人的代码

#include<iostream>
using namespace std;
int zuzong[100005];
int countzu[100005];
int count(int i){
    if(countzu[i]==0){
    int coun=1;
    if(zuzong[i]!=-1){
        coun=count(zuzong[i])+1;
    } else{
        coun=1;
    }
    countzu[i]=coun;
    return coun;
    }
    else{
        return countzu[i];
    }
}
int main(){
    int n;
    cin>>n;
    int a;
    
    for(int i=1;i<=n;i++){
        cin>>a;
        zuzong[i]=a;
    }
    int max=0;
    for(int i=1;i<=n;i++){
        countzu[i]=count(i);
        if(count(i)>max){
            max=count(i);
        }
    }
    cout<<max<<endl;
    int flag=1;
    for(int i=1;i<=n;i++){
        if(countzu[i]==max){
            if(flag){
            cout<<i;
            flag=0;    
            }else{
                cout<<" "<<i;
            }
            
        }
    }
    return 0;
}

我的代码

#include<iostream>
using namespace std;
int zuzong[1024];
int coutzuzong[1024];

int count(int i){
    int a=i;
    int n=1;
    while(zuzong[a]!=-1){
        a=zuzong[a];
        n++;
    }
    return n;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        zuzong[i]=x;
    }
    int max=0;
    for(int i=1;i<=n;i++){
        coutzuzong[i]=count(i);
        if(max<coutzuzong[i])
            max=coutzuzong[i];
    }
    cout<<max<<endl;
    int flag=1;
    for(int i=1;i<=n;i++){
        if(coutzuzong[i]==max){
            if(flag){
            cout<<i;
            flag=0;    
            }else{
                cout<<" "<<i;
            }
            
        }
    }
    return 0;
            
    }