bzoj1529 [POI2005]ska Piggy banks(并查集)

水题一道。

#include
#include
int n,ans=0,fa[1000001];
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i) fa[i]=i;
    for(int i=1;i<=n;++i){
        int y;scanf("%d",&y);
        int xx=find(i),yy=find(y);
        if(xx!=yy) fa[xx]=yy;
    }
    for(int i=1;i<=n;++i) if(fa[i]==i) ans++;
    printf("%d",ans);
    return 0;
}

你可能感兴趣的:(bzoj,并查集)