全WA!求dalao看看还能不能调
查看原帖
全WA!求dalao看看还能不能调
1071292
I_love_Vae楼主2024/12/8 08:44
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int p[N], d[N], n, ans; 
int find(int x)
{
	if(p[x] != x)
	{
		int root = find(p[x]);
		d[x] += d[p[x]];
		p[x] = root;
	}
	return p[x];
}
void merge(int a, int b)
{
	int pa = find(a);
	int pb = find(b);
	if(pa != pb)
	{
		p[pa] = pb;
		d[a] = d[b] + 1;
	}
	else
	{
		ans = min(ans, d[a] + d[b] + 1);
	}
}
bool same(int a, int b)
{
	return find(a)==find(b);
}
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++)
	{
		p[i] = i;
	}
    ans = 1e9;
    for(int i = 1; i <= n; i ++)
	{
    	int t;
        cin >> t;
        merge(i, t);
    }
    cout << ans;
    return 0;
}
2024/12/8 08:44
加载中...