Cod sursa(job #2328670)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 26 ianuarie 2019 09:33:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

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

int tata[100100],h[100100];

int findd(int x)
{
    int r=x;
    while(tata[r])r=tata[r];
    int y=x,t1;
    while(y!=r)
    {
        t1=tata[y];
        tata[y]=r;
        y=t1;
    }
    return r;
}


void unionn(int x,int y)
{
    int c;
    x=findd(x);
    y=findd(y);

    if(h[x]<h[y]){tata[x]=y;c=y;}
    else {tata[y]=x;c=x;}

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


int n,m,x,a,b,i;

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

    for(i=1;i<=n;i++)h[i]=1;

    for(i=1;i<=m;i++)
    {
        f>>x>>a>>b;

        if(x==1){unionn(a,b);}
        else
        {
            if(findd(a)==findd(b))g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }

    return 0;
}