Cod sursa(job #901750)

Utilizator TeOOOVoina Teodora TeOOO Data 1 martie 2013 11:33:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>

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

int getRoot(int node);

FILE *in,*out;
int numbers, questions;
int father[sz];

int main()
{
    in=fopen("disjoint.in","rt");
    out=fopen("disjoint.out","wt");

    fscanf(in,"%d%d",&numbers,&questions);

    while(questions--)
    {
        int type, node1, node2;
        fscanf(in,"%d%d%d",&type, &node1, &node2);
        if(type==1)
            father[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 (father[node]) ? father[node] = getRoot(father[node]) : node; }