1. 程式人生 > 其它 >Luogu 2661資訊傳遞(並查集)

Luogu 2661資訊傳遞(並查集)

這個題相信大家都很熟悉了,這裡想說一下有關的一些問題。

#include<cstdio>
#include<iostream>
using namespace std;
int f[200002],d[200002],n,minn,last;  
int fa(int x)
{
    if (f[x]!=x)    
    {
        int last=f[x];
        f[x]=fa(f[x]);   
        d[x]+=d[last];    
    }
    return f[x];
}
void check(int a,int b)
{
    
int x=fa(a),y=fa(b); if (x!=y) {f[a]=b; d[a]=1;} else minn=min(minn,d[b]+1); return; } int main() { int i,t; scanf("%d",&n); for (i=1;i<=n;i++) f[i]=i; minn=0x7777777; for (i=1;i<=n;i++) { scanf("%d",&t); check(i,t); } printf(
"%d",minn); return 0; }

這是我認為的並查集的做法,參考了洛谷題解的第一篇,但中間check是不一樣的,也可以AC。但是我對題解check函式的做法無法理解,覺得有背邏輯,但也可能是我太菜了。

至於以上部分是我在洛谷上發表的,目前還沒有人來和我一起討論,如果您有一些想法,可以聯絡我。