Cod sursa(job #2050702)

Utilizator ruxi.icleanuRuxandra Icleanu ruxi.icleanu Data 28 octombrie 2017 11:05:10
Problema Paduri de multimi disjuncte Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 100000

int sef[MAXN+1];

inline int find_daddy(int x) {
    if(x==sef[x])
        return x;
    return sef[x]=find_daddy(sef[x]);
}

inline void unionn(int x, int y) {
    int sefx, sefy;
    sefx=find_daddy(x);
    sefy=find_daddy(y);
    sef[sefy]=sefx;
}

int main()
{
    int n, m, i, tip, x, y;
    FILE *fi, *fo;
    fi = fopen("disjoint.in", "r");
    fo = fopen("disjoint.out", "w");
    fscanf(fi, "%d%d", &n, &m);
    for(i=1; i<=n; i++)
        sef[i]=i;
    for(i=0; i<m; i++) {
        fscanf(fi, "%d%d%d", &tip, &x, &y);
        if(tip==1)
            unionn(x, y);
        else {
            if(find_daddy(x)==find_daddy(y))
                fprintf(fo, "DA\n");
            else
                fprintf(fo, "NU\n");
        }
    }
    fclose(fi);
    fclose(fo);
    return 0;
}