Cod sursa(job #2013663)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 21 august 2017 23:45:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <cstdio>
using namespace std;
int n;
struct arb
{
    int tata;
    int h;
} v[100001];



int rad(int nod)
{
    if(v[nod].tata==nod)
        return nod;
    else
    v[nod].tata=rad(v[nod].tata);
    return v[nod].tata;
}
void uni(int a,int b)
{
    a=rad(a);
    b=rad(b);
    if(v[a].h>v[b].h)
    {
        v[b].tata=a;
        v[b].h=v[a].h+1;
    }
    else
    {
        v[a].tata=b;
        v[a].h=v[b].h+1;
    }

}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int i,j,m,p,k;
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++)v[i].tata=i;
    for(i=0; i<m; i++)
    {
        scanf("%d%d%d",&p,&j,&k);
        if(p==1)
        {
            uni(j,k);
        }
        else
        {
            int d=rad(j),f=rad(k);
            if(d==f)printf("DA\n");
            else printf("NU\n");
        }
    }



    return 0;
}