Cod sursa(job #2439370)

Utilizator daru06Daria Culac daru06 Data 15 iulie 2019 18:54:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int i, p[100001], Rank[100001], cod, x, y, n, m, o; // rank este altceva

void Union (int r1, int r2)   // Se reunesc multimile cu radacinile r1 si r2.
{
    if (Rank[r1] > Rank[r2]) {
        p[r2] = r1;
    }
    else
    {
        p[r1] = r2;
        if (Rank[r1] == Rank[r2])
            Rank[r2]++;
    }
}

int FindSet (int nod)
{
//  while (p[nod] != nod)
//    nod = p[nod];
//  return p[nod];
    if(p[nod]!=nod)
        p[nod] = FindSet(p[nod]);
    return p[nod];
}

int main ()
{
    fin >> m >> o;
    for (i = 1; i <= m; i++)
        p[i] = i;
    while (o--)
    {
        fin >> cod >> x >> y;
        if (cod == 1)
            Union(FindSet(x), FindSet(y));
        else {
          if (FindSet(x) == FindSet(y))
            fout << "DA\n";
          else
            fout << "NU\n";
        }
    }
    return 0;
}