90分求助
查看原帖
90分求助
283255
__LYY_p楼主2022/12/27 12:43
#include<iostream>
using namespace std;
const int maxn=400000;
int n,out[maxn],in[maxn],tag[maxn],ans=0x3f3f3f3f;
void dfs(int cnt,int fa){
    if(tag[cnt]){
        if(tag[fa]-tag[cnt]>0)ans=min(ans,tag[fa]-tag[cnt]+1);
        //cout<<cnt<<' '<<fa<<' '<<ans<<endl;
        return;
    }
    tag[cnt]=tag[fa]+1;
    dfs(out[cnt],cnt);
    return;
}
int main(){
    //freopen("P2661_2.in","r",stdin);
    //freopen("P2661_2.ans","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>out[i];
        in[out[i]]++;
    }
    for(int i=1;i<=n;i++){
        if(tag[i]==0)dfs(i,0);
    }
    cout<<ans;
    return 0;
}

点2WA

2022/12/27 12:43
加载中...