hdu 1232 并查集

来源:互联网 发布:还珠格格 皇后 知乎 编辑:程序博客网 时间:2024/05/08 17:18
#include <iostream>using namespace std;#define MAX 10001int N,M;int Father[MAX];int Rank[MAX];int sum;void Make_Set(int x){Father[x] = x;Rank[x] = 1;}int Find(int x){while(x != Father[x]){x = Father[x];}return x;}void Union(int x,int y){x = Find(x);y = Find(y);if(x == y)return;if(Rank[x] > Rank[y]){Father[y] = x;Rank[x] += Rank[y];}else{Father[x] = y;Rank[y] += Rank[x];}sum --;}int main(){while(cin>>N){if(N == 0)break;sum = N;cin>>M;int x,y;for(int i = 0; i <= N; i++){Make_Set(i);}for(int i = 1; i <= M; i++){cin>>x>>y;Union(x,y);}cout<<sum-1<<endl;}return 0;}

原创粉丝点击