Cod sursa(job #2704797)

Utilizator Uriesu_IuliusUriesu Iulius Uriesu_Iulius Data 11 februarie 2021 11:54:58
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m;
int t[100001], rang[100001];

int Radacina(int k)
{
    if(t[k] == 0)
        return k;
    int x = Radacina(t[k]);
    t[k] = x;
    return x;
}

void Unire(int k, int p)
{
    int rk = Radacina(k), rp = Radacina(p);
    if(rk != rp)
    {
        if(rang[rk] < rang[rp])
            t[rk] = rp;
        else
        {
            t[rp] = rk;
            if(rang[rk] == rang[rp])
                rang[rk]++;
        }
    }
}

int main()
{
    int i, x, y, cod;
    fin >> n >> m;
    for(i = 0; i < m; i++)
    {
        fin >> cod >> x >> y;
        if(cod == 1)
            Unire(x, y);
        else
        {
            int rx = Radacina(x), ry = Radacina(y);
            if(rx == ry)
                fout << "DA";
            else
                fout << "NU";
            fout << "\n";
        }
    }
    return 0;
}