Cod sursa(job #1705113)

Utilizator serban_andreiserban andrei-catalin serban_andrei Data 19 mai 2016 22:46:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
#define nmax 100014

using namespace std;

int tata[nmax],rang[nmax],x,y,cod,i,n,m;

int stramos(int nod)
{
    int r=nod;
    int var;
    while(r!=tata[r])
        r=tata[r];
    while(nod!=tata[nod])
    {
        var=tata[nod];
        tata[nod]=r;
        nod=var;
    }
    return r;
}


void unim(int x,int y)
{
    x=stramos(x);
    y=stramos(y);
    if(x==y)
        return;
    if(rang[x]>rang[y])
    {
        rang[x]=rang[x]+rang[y];
        tata[y]=tata[x];
    }
    else
    {
        rang[y]=rang[y]+rang[x];
        tata[x]=tata[y];
    }

}


int main()
{

    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    int x,y,cod;
     f>>n>>m;
    for(i=1;i<=n;i++)
    {
        tata[i]=i; rang[i]=1;
    }
    i=1;
    while(i<=m)
    {
        f>>cod>>x>>y;
        if(cod==1)
           unim(x,y);
        else
        {


            if(stramos(x)==stramos(y))
               g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
        ++i;
    }
    return 0;
}