Cod sursa(job #232885)

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

#define Nmax 100100

int t[Nmax], p[Nmax];

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

int join(int a,int b)
{
    if (p[a] > p[b])
    t[b] = a;
    else
    {
        if (p[a] == p[b]) ++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(mult(a),mult(b)); else
        if(mult(a)==mult(b)) printf("DA\n"); else printf("NU\n");    
    }
    
    return 0;    
}