byteland

Added: 2025-09-13 06:11:56

Question Image

byteland

Answer

✏️ Edit
#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;
}