传送门

解题思路

记忆化搜索,如果搜到环,就将环的大小处理出来。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std;
const int MAXN = 100005; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
} int n,nxt[MAXN],f[MAXN];
int vis[MAXN],num,k; inline int solve(int x){ //处理环的大小
int ret=0;int pre=x;
while(nxt[x]!=pre) {
ret++;
x=nxt[x];
}
return ret+1;
} inline int dfs(int x){
if(f[x]) return f[x];
if(vis[x]==num){
if(x==nxt[x]) return 0;
f[x]=solve(x);k=x;return f[x];
}
vis[x]=num;
int F=dfs(nxt[x]);
if(!k) {f[x]=F+1;return F+1;} //k表示是否成环
else if(k==x) {k=0;f[x]=F;return F;}
else {f[x]=F;return F;}
} int main(){
n=rd();
for(register int i=1;i<=n;i++) nxt[i]=rd();
for(register int i=1;i<=n;i++){
k=0;num++;
printf("%d\n",dfs(i));
}
return 0;
}

最新文章

  1. Spring-boot 开发Web应用
  2. Apache2.4部署django出现403 Forbidden错误解决办法
  3. 分布式事务二阶提交DTS系统
  4. springboot使用之三:springboot使用logback日志
  5. 创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
  6. javaWeb学习之运用myeclipse结合tomcat开发一些简单的jsp和service
  7. swift简介
  8. HDU 2159 FATE【二维完全背包】
  9. JAVA - Blowfish加密出现java.security.InvalidKeyException: Illegal key size 解决方案
  10. 重载public Primes ():this(2,100)
  11. MySql的rpm安装
  12. Delphi自定义消息应用及delphi托盘实现
  13. 什么是SSL
  14. 零基础学Python--------第3章 流程控制语句
  15. websocket的简单使用
  16. 【Linux】linux下gzip的压缩/解压缩详解
  17. HDU 6150 Vertex Cover(构造)
  18. 为控件动态添加Style
  19. 实例讲解JQuery中this和$(this)区别
  20. PowerShell 惠普打印机双面驱动自动设置已安装

热门文章

  1. HTML 颜色表示
  2. day 42 02--CSS的继承性和层叠性
  3. 北京信息科技大学校赛 题解 | AK记录贴
  4. 关于Collection接口和Map
  5. 2018-12-6-Roslyn-如何基于-Microsoft.NET.Sdk-制作源代码包
  6. 新浪新闻API
  7. Ionic Cordova Sqlite 实现保存用户名登陆
  8. 关于ie11的浏览器检测
  9. 二、深入asyncio协程(任务对象,协程调用原理,协程并发)
  10. 2019阿里云开年Hi购季必抢!爆爆爆爆爆爆爆款清单来了!