33. Information Transfer
1. Qustion Link
2. Question ideas
Use the Union-find set to recode the longest ring of the people
3. Question Answer
#include<bits/stdc++.h>
using namespace std;
#define maxn 200010
int n,f[maxn],s[maxn];
inline void init()
{
for(int i=1;i<=n;i++)
f[i]=i;
}
int find(int x,int & counts)
{
counts++;
return x==f[x]?x:(find(f[x],counts));
}
int main()
{
int mins = 0x3f3f3f3f;
cin>>n;
for(int i=1;i<=n;i++)
f[i]=i;
for(int i=1;i<=n;i++)
{
int counts=0,fs;
cin>>fs;
if(find(fs,counts)==i)
mins = min(mins,counts);
else
f[i]=fs;
}
cout<<mins;
return 0;
}