Cod sursa(job #1809829)

Utilizator shpincCandrea Laurentiu Vasile shpinc Data 19 noiembrie 2016 12:29:13
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

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

int t[100000],r[100000],i,n,m,p,x,y;;

int findd(int x)
{

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

}

void uniune(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()
{

    f>>n>>m;

    for(i=1; i<=m; i++)
    {
        f>>p>>x>>y;
        if(p==1)
            uniune(findd(x),findd(y));
        else
            if(findd(x)==findd(y))
                g<<"DA"<<"\n";
            else
                g<<"NU"<<"\n";
    }
    return 0;
}