Cod sursa(job #2202099)

Utilizator MatteusTanase Matei Matteus Data 7 mai 2018 15:42:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int t[100005], nrn[100005], nrop, n, op, x, y;

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

bool gaseste(int x, int y)
{
    return (radacina(x)==radacina(y));
}

void uniune(int x, int y)
{
    int rx=radacina(x);
    int ry=radacina(y);
    if(nrn[x]<nrn[y])
    {
        t[rx]=ry;
        nrn[ry]+=nrn[rx];
    }
    else
    {
        t[ry]=rx;
        nrn[rx]+=nrn[ry];
    }
}

void citire()
{
    cin>>n>>nrop;
    for(int i=1; i<=n; i++)
        nrn[i]=1;
    for(int i=1; i<=nrop; i++)
    {
        cin>>op>>x>>y;
        if(op==1)
            uniune(x,y);
        else
        {
            bool ok=gaseste(x, y);
            if(ok)
                cout<<"DA"<<'\n';
            else
                cout<<"NU"<<'\n';
        }
    }
}


int main()
{
    citire();
    return 0;
}