初涉并差集,写的有点挫哈~
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1010;
int M, N;
int parent[MAXN];
int myfind(int i)
{
int r = i;
while (parent[r] != r)
{
r = parent[r];
}
return r;
}
inline void merge(int a, int b)
{
if (a < b)
{
parent[b] = a;
}
else
{
parent[a] = b;
}
}
int main() {
int T, a, b, ans;
scanf("%d", &T);
while (T--)
{
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; i++)
{
parent[i] = i;
}
for (int i = 0; i < M; i++)
{
scanf("%d%d", &a, &b);
merge(myfind(a), myfind(b));
}
ans = 0;
for (int i = 1; i <= N; i++)
{
if (parent[i] == i)
{
ans++;
}
}
printf("%d\n", ans);
}
return 0;
}