RE求助
查看原帖
RE求助
322437
xxxalq楼主2023/6/9 21:07
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int n,rudu[200010],ans=0x3f3f3f3f,tmp,dq;
vector<int>mp;
bool mk[200010];
void lun(int x){
    mk[x]=0;
    if(x==dq){
        return;
    }
    tmp+=1;
    lun(mp[x]);
    return;
}
void del(int x){
    mk[x]=0;
    rudu[mp[x]]-=1;
    if(rudu[mp[x]]==0){
        del(mp[x]);
    }
    return;
}
int main(){
    memset(mk,1,sizeof(mk));
    cin>>n;
    int to;
    for(int i=1;i<=n;i++){
        cin>>to;
        mp[i]=to;
        rudu[to]+=1;
    }
    for(int i=1;i<=n;i++){
        if(rudu[i]==0&&mk[i]){
            del(i);
        }
    }
    for(int i=1;i<=n;i++){
        if(mk[i]){
            tmp=0,dq=i;
            lun(i);
            ans=min(ans,tmp);
        }
    }
    cout<<ans<<endl;
    return 0;
}
2023/6/9 21:07
加载中...