#include<stdio.h>
using namespace std;
int tree[100];
int findroot(int x)
{
if (tree[x] == -1)
return x;
else
{
int temp = findroot(tree[x]);
tree[x] = temp;
return temp;
}
}
int main()
{
int n, m;
while (scanf("%d%d", &n, &m) != EOF)
{
for (int i = 0; i <= n; i++)
tree[i] = -1;
for (int i = 0; i < m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
a = findroot(a);
b = findroot(b);
if (a != b)
tree[a] = b;
}
int ans = 0;
for (int i = 0; i <= n; i++)
{
if (tree[i] == -1)
ans++;
}
printf("%d\n", --ans);
}
}
计算集合中元素的个数
#include<stdio.h>
using namespace std;
int tree[101];
int sum[101];
int findroot(int x)
{
if (tree[x] == -1)
return x;
else
{
int temp = findroot(tree[x]);
tree[x] = temp;
return temp;
}
}
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int i;
for (int i = 0; i <= 100; i++)
{
tree[i] = -1; sum[i] = 1;
}
for (i = 0; i < n; i++)
{
int a, b;
scanf("%d%d", &a, &b);
a = findroot(a);
b = findroot(b);
if (a != b)
{
tree[a] = b;
sum[b] += sum[a];
}
}
int ans = 1;
for (i = 0; i <= 100; i++)
{
if (sum[i] > ans&&tree[i] == -1)
ans = sum[i];
}
printf("%d\n", ans);
}
return 0;
}