Cod sursa(job #876103)

Utilizator TeOOOVoina Teodora TeOOO Data 11 februarie 2013 12:05:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>

//Constante
int const sz = (int)1e5+1;

//Functii
int getRoot(int node);

FILE *in,*out;

int elements, questions;
int type, node1, node2;
int mom[sz];

int main()
{
    in=fopen("disjoint.in","rt");
    out=fopen("disjoint.out","wt");
    fscanf(in,"%d%d",&elements,&questions);

    while(questions--)
    {
        fscanf(in,"%d%d%d",&type, &node1, &node2);
        if(type==1)
            mom[getRoot(node2)] = getRoot(node1);
        else
            fprintf(out,"%s\n", (getRoot(node1)==getRoot(node2))? "DA" : "NU");
    }


    fclose(in);
    fclose(out);
    return 0;
}

int getRoot(int node)
{
    //return mom[node]? mom[node] = getRoot(mom[node]) : node;
    if(mom[node])
        return mom[node] = getRoot(mom[node]);
    else
        return node;
}