Cod sursa(job #3261992)

Utilizator winemomComan Erin winemom Data 8 decembrie 2024 09:46:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
#define nMax 100005

int n, tat[nMax], nr[nMax];

int radacina(int x)
{
    if(tat[x] == 0)
        return x;
    tat[x] = radacina(tat[x]);
    return tat[x];
}

void Union(int x, int y)
{
    int rx = radacina(x);
    int ry = radacina(y);

    if(nr[rx] > nr[ry])
        swap(rx, ry);
    tat[rx] = ry;
    nr[ry] += nr[rx];
}

int main()
{
    for(int i=0; i<=nMax; i++)
        nr[i] = 1;
    int q, operatie, x, y;
    f >> n >> q;
    while(q--)
    {
        f >> operatie >> x >> y;
        if(operatie == 1)
        {
            Union(x, y);
        }
        else
            if(operatie == 2)
            {
                if(radacina(x) == radacina(y))
                    g << "DA\n";
                else
                    g << "NU\n";
            }
    }
}