Cod sursa(job #2512567)

Utilizator Vladv01Vlad Vladut Vladv01 Data 21 decembrie 2019 11:49:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>


using namespace std;


ifstream f("disjoint.in");
ofstream g("disjoint.out");


int t[100005],ad[100005];

int n,m;

int radacina(int x)
{
    if (x == t[x])
        return x;
    int y = radacina(t[x]);
    t[x] = y;
    return y;
}


void verif(int x,int y)
{
    if(radacina(x)==radacina(y))
        g<<"DA\n";
    else
        g<<"NU\n";
}

void unire(int x,int y)
{
    if (ad[x]>ad[y])
        t[y]=x;
    else
        t[x]=y;
    if (ad[x] == ad[y])
        ad[y]++;
}

int type,x,y;

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
        t[i]=i;
    for(int i=1;i<=m;i++)
    {
        f>>type>>x>>y;
        if(type==1)
        {
            x=radacina(x);
            y=radacina(y);
            unire(x,y);
        }

        else
            verif(x,y);
    }
    return 0;
}