Question and Answer from L4-M3
#include <stdio.h>
int parent[100001];
int find(int x) {
if (parent[x] != x) {
parent[x] = find(parent[x]);
}
return parent[x];
}
void union_sets(int x, int y) {
int px = find(x);
int py = find(y);
if (px != py) {
parent[px] = py;
}
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
parent[i] = i;
}
for (int i = 0; i < m; i++) {
int a, b;
scanf("%d %d", &a, &b);
union_sets(a, b);
}
int first_of_component[100001];
int component_count = 0;
for (int i = 1; i <= n; i++) {
find(i);
}
for (int i = 1; i <= n; i++) {
if (parent[i] == i) {
first_of_component[component_count++] = i;
}
}
printf("%d\n", component_count - 1);
for (int i = 1; i < component_count; i++) {
printf("%d %d\n", first_of_component[0], first_of_component[i]);
}
return 0;
}