Cod sursa(job #232875)

Utilizator crawlerPuni Andrei Paul crawler Data 16 decembrie 2008 10:43:54
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>

#define Nmax 100100

int t[Nmax], p[Nmax];

int mult(int x)
{
    while (x!= t[x]) x = t[x];
    return x;    
}

int join(int a,int b)
{
    a = mult(a);
    b = mult(b);
    if (p[a] >= p[b])
    t[b] = t[a];
    else
    {
        ++p[b];
        t[a] = b;
    }    
}

int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    
    int n,m,op,a,b;
    
    scanf("%d%d",&n,&m);
    
    for (int i=1;i<=n;++i) t[i] = i;
    
    for (int i=1;i<=m;++i)
    {
        scanf("%d%d%d",&op,&a,&b);
        if (op == 1) join(a,b); else
        printf("%s\n", (mult(a)==mult(b))?"DA":"NU");    
    }
    
    return 0;    
}