Cod sursa(job #1809814)

Utilizator SirStevensIonut Morosan SirStevens Data 19 noiembrie 2016 12:19:51
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;

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

int t[100001],q,r[100001],n,m;

int caut( int x)
{
    int rad = x;
    while(t[rad] != 0)
        rad=t[rad];

    int tmp;
    while(t[x]!=0)
    {
        tmp=t[x];
        t[x]=rad;
        x=tmp;
    }
    return rad;
}

void unire(int x, int y)
{

    if(r[x] > r[y])
        t[y]=x;
    else
        if(r[x] < r[y])
            t[x]=y;
        else{
            t[y]=x;
            r[x]++;
        }

}

int main()
{
    in >> n >> m;
    int x,y;
    for(int i= 1 ; i <= m; i++)
    {
        in>>q>>x>>y;
        if(q == 1)
        {
            unire(x,y);
        }
        else
            if(caut(x) == caut (y))
                out<<"DA" << '\n';
            else
                out<<"NU" << '\n';
    }
    return 0;
}