显示超时,想知道怎么改

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

#include<stdio.h>
int a[100000]={0},b[100000]={0};
int n,i,k;
int max=0;
int num=0;
int main()
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
num=0;
k=a[i];
k=a[k];
num++;
while(k!=a[i])
{
k=a[k];
num++;
}
b[i]=num;
if(max<b[i])
max=b[i];
}
printf("%d",max);
return 0;
}

运行结果及报错内容

超时

我的解答思路和尝试过的方法
我想要达到的结果

这代码是要实现什么功能?

while(k!=a[i])
{
k=a[k];
num++;
}
你写的这就是个标准的死循环,不超时才见鬼了