您的位置:首页 > 其它

HDU 1213 How Many Tables 并查集

2017-03-31 11:44 459 查看

题意

n个点,m条边,无向图,求最后形成的集合有多少个。

解法

基础的并查集

传送门

http://acm.hdu.edu.cn/showproblem.php?pid=1213

Code

#include <cstdio>
#include <iostream>

using namespace std;

class UnionFind {
private:
int * fa;
int size;
public:
UnionFind(int n) {
size = n;
fa = new int[n+1];
for(int i = 1 ; i <= size ; i ++) {
fa[i] = i;
}
}

~UnionFind() {
delete[] fa;
}

int Find(int x) {
if(fa[x] != x) {
fa[x] = Find(fa[x]);
}
return fa[x];
}

void Union(int x,int y) {
int fx = Find(x);
int fy = Find(y);
if(fx != fy) {
fa[fx] = fy;
}
}

int GetCount() {
int count = 0;
for(int i = 1 ; i <= size ; i ++) {
if(fa[i] == i) {
count ++;
}
}
return count;
}
};

int main() {
int caseNum;
scanf("%d",&caseNum);
while(caseNum--) {
int n , m ;
scanf("%d %d",&n,&m);
UnionFind uf(n);
for(int i = 1 ; i <= m ; i ++) {
int u , v;
scanf("%d %d",&u,&v);
uf.Union(u,v);
}
int ans = uf.GetCount();
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  并查集-图论