How Many Tables HDU - 1213(並查集)
阿新 • • 發佈:2019-01-02
#include <stdio.h>
int list[1010];
int findRoot(int x)
{
if(list[x] == x)
return x;
int tmp = findRoot(list[x]);
list[x] = tmp;
return tmp;
}int main()
{
int k;
scanf("%d", &k);
int n, m, a, b;
while(k--)
{
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
list[i] = i;
int x1, x2;
for(int i = 0; i < m; i++)
{
scanf("%d %d", &a, &b);
a = findRoot(a); //這兒必須要這樣寫,不要定義別的變數
b = findRoot(b);
if(a != b)
list[a] = b;
}
int ans = 0;
for(int i = 1; i <= n; i++)
{
if(list[i] == i)
ans++;
}
printf("%d\n", ans);
}
return 0;
}