Cod sursa(job #1161899)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 31 martie 2014 15:23:50
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#define Nmax 100005

using namespace std;

int t[Nmax];

inline int Find(int a)
{
    int rad,i=a;
    while(t[a]>0)
        a=t[a];
    rad=a;
    while(t[i]>0)
    {
        a=t[i];
        t[i]=rad;
        i=a;
    }
    return rad;
}

inline void Union(int a, int b)
{
    t[a]+=t[b];
    t[b]=a;
}

int main()
{
    int N,M,tip,a,b,i;
    freopen ("disjoint.in","r",stdin);
    freopen ("disjoint.out","w",stdout);
    scanf("%d%d", &N,&M);
    for(i=1;i<=N;++i)
        t[i]=-1;
    while(M--)
    {
        scanf("%d%d%d", &tip,&a,&b);
        if(tip==1)
            Union(Find(a),Find(b));
        else
            if(Find(a)==Find(b))
                printf("DA\n");
            else
                printf("NU\n");
    }
    return 0;
}