Cod sursa(job #1036429)

Utilizator jul123Iulia Duta jul123 Data 19 noiembrie 2013 13:01:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<iostream>
#include<fstream>
#include<cstdio>
int t[100000], Rg[100000];
using namespace std;
int caut_radacina(int x)
{
    int y, z, rad;
    y=x;
    while(t[y] != y)
        y = t[y];
    rad = y;
    y = x;
    while(t[y] != y)
    {
        z = y;
        y = t[y];
        t[z] = rad;
    }
    return rad;
}
void cod1(int x, int y)
{
    int radx, rady;
    radx = caut_radacina(x);
    rady=caut_radacina(y);
    if(Rg[radx] >= Rg[rady])
        t[rady]=radx;
    if(Rg[radx] == Rg[rady])
        Rg[rady]++;
}
int main()
{
    FILE *fin, *fout;
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out", "w");

    int m, n, cod, x, y, i;

    fscanf(fin, "%d %d", &n, &m);
    for(i = 0; i < n; i++)
    {
        t[i] = i; Rg[i] = 1;
    }

    for(i = 0; i < m; i ++)
        {
            fscanf(fin, "%d %d %d", &cod, &x, &y);
            if(cod == 2)
                if(caut_radacina(x)==caut_radacina(y))
                    fprintf(fout, "DA\n");
                else
                    fprintf(fout, "NU\n");
            if(cod==1)
                if(caut_radacina(x)!=caut_radacina(y))
                    cod1(x,y);
        }


}