此题关键词:“并查集”
#include <stdio.h>
#include <stdlib.h>
int a[1000000];
int root(int n){//找根
if(a[n] == -1)
return n;
return root(a[n]);
}
void add(int x, int y){增加
int x_root = root(x), y_root = root(y);
if(x_root != y_root)
a[x_root] = y_root;
}
int main(int argc, char *argv[]) {
memset(a, -1, sizeof(a));
int n, m, i, t1, t2, count = 0;
scanf("%d%d", &n, &m);
m *= n;
scanf("%d", &n);
for(i=0; i<n; i++){
scanf("%d%d", &t1, &t2);
add(t1, t2);
}
for(i=1; i<=m; i++)
if(a[i] == -1)
count++;
printf("%d", count);
return 0;
}