过了,但有一个对路径压缩的疑问
查看原帖
过了,但有一个对路径压缩的疑问
1023371
SaierOscar楼主2024/7/24 22:10

AC代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, f, cnt, fa[200005], ans = LONG_LONG_MAX;
int find (int x)
{
    cnt++;
    if (fa[x] == x) return x;
    else return find(fa[x]);
}
signed main ()
{
    scanf("%lld", &n);
    for (int i = 1; i <= n; i ++)
        fa[i] = i;
    for (int i = 1; i <= n; i++)
	{
        cnt = 0, scanf("%lld", &f);
        if (find(f) == i)
            ans = min(ans, cnt);
        else
        	fa[i] = f;
    }
    printf("%lld", ans);
    return 0;
}

WA 10pts代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, f, cnt, fa[200005], ans = LONG_LONG_MAX;
int find (int x)
{
    cnt++;
    if (fa[x] == x) return x;
    else return fa[x] = find(fa[x]);
}
signed main ()
{
    scanf("%lld", &n);
    for (int i = 1; i <= n; i ++)
        fa[i] = i;
    for (int i = 1; i <= n; i++)
	{
        cnt = 0, scanf("%lld", &f);
        if (find(f) == i)
            ans = min(ans, cnt);
        else
        	fa[i] = f;
    }
    printf("%lld", ans);
    return 0;
}

有没有哪位大佬能帮蒟蒻解释一下为什么加上fa[x] = 就会错

2024/7/24 22:10
加载中...