Cod sursa(job #2012036)

Utilizator ioanadarcCristina Arc ioanadarc Data 17 august 2017 17:38:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M,rad[Nmax],r[Nmax],op;
int radacina(int x)
{
    int R;
    for(R = x; rad[R] != R; R = rad[R]);
    for(;rad[x]!=x;)
    {
        int y = rad[x];
        rad[x] = R;
        x = y;
    }
    return R;
}
void un(int x, int y)
{
   if(r[x]>r[y])
        rad[y] = x;
   else
        rad[x] = y;
   if(r[x] == r[y])r[y]++;

}
int main()
{
    int x, y;
    fin >> N >> M;
    for(int i = 1; i <= N; i++)
    {
        rad[i] = i;
        r[i] = 1;
    }
    for(int i = 1; i <= M; i++)
    {
        fin >> op >> x >> y;
        if(op == 1)
        {
            if(radacina(x) != radacina(y))
                un(radacina(x), radacina(y));
        }
        else
        {
            if(radacina(x) == radacina(y))fout << "DA\n";
            else fout << "NU\n";
        }
    }
    return 0;
}