acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 竞赛
  • 讨论
  • 团队
登录
注册
题目详情提交记录(0)
  • 题解

    #include<iostream> #include<cstdio> #include<cstring> #include<stack> #define M 210000 #define INF 123123123 using namespace std; int nx[M]={0},n,vis[M]={0},t=0; bool b[M]={0}; stack<int> s; int bfs(int x){ vis[x]=++t; if(nx[x]==x) return INF; b[x]=1; s.push(x); while(!vis[nx[x]]){ x=nx[x]; vis[x]=++t; b[x]=1; s.push(x); } if(b[nx[x]]){ while(!s.empty()) b[s.top()]=0,s.pop(); return vis[x]-vis[nx[x]]+1; }else{ while(!s.empty()) b[s.top()]=0,s.pop(); return INF; } } int main(){ scanf("%d",&n); int minn=INF; for(int i=1;i<=n;i++) scanf("%d",nx+i); for(int i=1;i<=n;i++) if(!vis[i]) minn=min(minn,bfs(i)); cout<<minn<<endl; return 0; }

    userId_undefined

    ༺ཌༀ༒☯∞复仇者∞☯༒ༀད༻™

    出道萌新时空双修者8月全勤卷王题解仙人
    3阅读
    0回复
    0点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页