Cod sursa(job #2328689)

Utilizator danin01Nastase Daniel danin01 Data 26 ianuarie 2019 09:47:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n,q,t[100001],h[100001];

int fin(int x)
{

    int r=x;

    while(t[r]!=r)r=t[r];

    int y=x,aux;

    while(y!=r)
    {
        aux=t[y];
        t[y]=r;
        y=aux;
    }

    return r;

}

void siuu(int x,int y)
{
    int c;

    x=fin(x);
    y=fin(y);


    if(h[x]<h[y])
    {

        t[x]=y;
        c=y;
    }
    else
    {
        t[y]=x;
        c=x;
    }

    if(h[x]==h[y])h[c]++;


}

int main()
{
    f>>n>>q;

    for(int i=1;i<=n;++i)
    {
        h[i]=1;
        t[i]=i;
    }

    for(int i=1;i<=q;++i)
    {
        int x,a,b;
        f>>x>>a>>b;
        if(x==1)
        {
            siuu(a,b);
        }
        else
        {
            a=fin(a);
            b=fin(b);
            if(a==b)
                g<<"DA";
            else g<<"NU";
            g<<'\n';
        }

    }

    return 0;
}