Cod sursa(job #1803473)

Utilizator dragos_vecerdeaVecerdea Dragos dragos_vecerdea Data 11 noiembrie 2016 15:24:29
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>

using namespace std;
FILE *fin = fopen("disjoint.in" , "r");
FILE *fout =  fopen("disjoint.out" , "w");
int n, tata[100001], q,tip ,x ,y;
int finder(int x)
{
    if(tata[x]==x) return x;
    else
    {
        tata[x] = finder(tata[x]);
        finder(tata[x]);
    }
}

void uniune(int x, int y)
{
    tata[x] = finder(y);
}
int main()
{
    fscanf(fin , "%d" , &n);
    for(int i=1; i<=n;i++)
    {
        tata[i]=i;
    }
    fscanf(fin , "%d", &q);
    for(int i=1; i<=q; i++)
    {
        fscanf(fin , "%d%d%d", &tip, &x,&y);
        if(tip == 1)uniune(x,y);
        else
        {
            if(tata[x]==tata[y]) fprintf(fout , "DA\n");
            else fprintf(fout, "NU\n");
        }
    }
    return 0;
}