建议加强数据
查看原帖
建议加强数据
754502
_AyachiNene楼主2023/10/5 16:11

有人并查集没路径压缩,按秩合并,n^2过了

#include<bits/stdc++.h>
#define int long long
#define double long double
#define INF INT_MAX
using namespace std;
const int maxn=2e5+5;
int n,ans=INF,sum;
int t[maxn],f[maxn];
int find(int x){
	sum++;
	if(f[x]==x) return x;
	else return find(f[x]);
}
signed main() {
	freopen("message.in","r",stdin);
	freopen("message.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n;
    for(int i=1;i<=n;i++) f[i]=i;
    for(int i=1;i<=n;i++) cin>>t[i];
    for(int i=1;i<=n;i++){
    	sum=0;
    	int A=find(t[i]);
    	if(A==i) ans=min(ans,sum);
		else f[i]=t[i];
//		for(int i=1;i<=n;i++) cout<<f[i]<<" ";
//		cout<<endl;
	}
	cout<<ans<<endl;
    return 0;
}
/*
5
2 4 2 3 1
*/

2023/10/5 16:11
加载中...