Cod sursa(job #1144717)

Utilizator dragos_vecerdeaVecerdea Dragos dragos_vecerdea Data 17 martie 2014 15:07:16
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>

using namespace std;
FILE *fin ,*fout;
int tata[100001];
int retin[100001];
int radacina(int x)
{
    int ramas=1 ,i;
    while(tata[x]!=0)
    {
        retin[ramas]=x;
        ramas++;
        x=tata[x];
    }
    for(i=1;i<ramas;i++)
    {
        tata[retin[i]]=x;
    }
    return x;
}
int main()
{
    fin  = fopen("disjoint.in"  ,"r");
    fout = fopen("disjoint.out" ,"w");
    int n ,tests , t ,x ,y ,rx ,ry ,i;
    fscanf(fin , "%d%d" , &n , &tests);
    for(i=1;i<=tests;i++)
    {
        fscanf(fin , "%d%d%d" , &t ,&x ,&y );
        rx=radacina(x);
        ry=radacina(y);
        if(t==1)
        {
            tata[rx]=ry;
        }
        else
        {
            if(rx==ry) fprintf(fout , "DA\n");
            else fprintf(fout , "NU\n");
        }
    }
    return 0;
}