[POJ 2524]Ubiquitous Religions 並查集

題目大意

求不相交集合數
裸並查集

代碼

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

namespace Union_Find_Set{
    #define MAXN 100005
    int fa[MAXN],flag[MAXN];

    void Initialize(){
        for(int i=0;i<MAXN;i++){
            fa[i]=i;flag[i]=0;
        }
    }

    int Find(int x){
        return fa[x]==x?x:fa[x]=Find(fa[x]);
    }

    void Union(int x,int y){
        int a=Find(x),b=Find(y);
        if(a>b){
            fa[b]=a;
        }else{
            fa[a]=b;
        }
    }

}

int N,m,ans(0),num(1);
int main() {
    while(scanf("%d%d",&N,&m)!=EOF) {
        if(N==0&&m==0) break;
        using namespace Union_Find_Set;
        Initialize();
        int a,b;
        for(int i=1;i<=m;i++){
            scanf("%d%d",&a,&b);            
            Union(a,b);
        }   
        ans=0;  
        for(int i=1;i<=N;i++){
            int t=Find(i);
            if(!flag[t]) ans++;
            flag[t]=1;
        }
        cout<<"Case "<<num++<<": "<<ans<<endl;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章