Cod sursa(job #2700987)

Utilizator ecaterinaEcaterina Stefanescu ecaterina Data 29 ianuarie 2021 15:30:14
Problema Paduri de multimi disjuncte Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>

int sef[100001];

int find(int i) {
    if (sef[i] == i) {
        return i;
    }
    return sef[i] = find(sef[i]);
}

void Union(int i, int j) {
    int sefi, sefj;
    
    sefi = find(i);
    sefj = find(j);
    
    sef[sefj] = sefi;
}

int main() {
    FILE *fin, *fout;
    fin = fopen("disjoint.in", "r");
    fout = fopen("disjoint.out", "w");
    
    int n, m, c, mm, i, j;
    
    fscanf(fin, "%d%d", &n, &m);
    
    for (i=1; i<=n; i++) {
        sef[i] = i;
    }
    
    for (mm=0; mm<m; mm++) {
        fscanf(fin, "%d", &c);
        fscanf(fin, "%d%d", &i, &j);
        if (c==1) {
            Union(i, j);
        } else {
            if (find(i) == find(j)) {
                fprintf(fout, "DA\n");
            } else {
                fprintf(fout, "NU\n");
            }
        }
    }
    
    fclose(fin);
    fclose(fout);
    return 0;
}