题解
2023-08-20 14:22:42
发布于:广东
14阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int f[maxn],d[maxn],n,minn,last;
int get(int x)
{
if (f[x]!=x)
{
int last=f[x];
f[x]=get(f[x]);
d[x]+=d[last];
}
return f[x];
}
void check(int a,int b)
{
int x=get(a),y=get(b);
if (x!=y)
{
f[x]=y;
d[a]=d[b]+1;
}
else minn=min(minn,d[a]+d[b]+1);
return;
}
int main()
{
int i,t;
cin>>n;
for (i=1;i<=n;i++) f[i]=i;
minn=0x7777777;
for (i=1;i<=n;i++)
{
cin>>t;
check(i,t);
}
cout<<minn;
return 0;
}
这里空空如也
有帮助,赞一个