HDU-1213 并查集裸题

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
#define DEBUG
const int maxn=110000+5,maxv=26,INF=0x3f3f3f3f,mod=100000000;
int n,m,p[maxn];
int find(int a){
    return p[a]==a?a:find(p[a]);
}
int main(){
#ifdef DEBUG
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    int t;
    cin>>t;
    while(t--){
        memset(p,0,sizeof(p));
        cin>>n>>m;
        int a,b;
        for(int i=1;i<=n;i++)
            p[i]=i;
        while(m--){
            cin>>a>>b;
            int pb=find(b),pa=find(a);
            if(pa!=pb)
                p[pa]=pb;
        }
        int ans=0;
        for(int i=1;i<=n;i++){
            if(p[i]==i)ans++;
        }
        printf("%d\n",ans);
    }
#ifdef DEBUG
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;
}

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