Cod sursa(job #731971)

Utilizator BugirosRobert Bugiros Data 9 aprilie 2012 14:51:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
using namespace std;

const int MAXN = 100010;

int tata[MAXN];
int n,m;

int radacina(int a)
{
    int aux;
    int r = a;
    while (tata[r] != 0)
        r = tata[r];
    while (tata[a] != 0)
    {
        aux = tata[a];
        tata[a] = r;
        a = aux;
    }
    return r;
}

inline void unire(int a,int b)
{
    tata[radacina(a)] = radacina(b);
}

inline bool e_aceeasi_multime(int a,int b)
{
    return radacina(a) == radacina(b);
}

int main()
{
    int cod;
    int x,y;
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf ("%d%d",&n,&m);
    for (int i = 1;i <= m;++i)
    {
        scanf ("%d%d%d",&cod,&x,&y);
        if (cod == 1)
            unire(x,y);
        if (cod == 2)
            printf ((e_aceeasi_multime(x,y))?"DA\n":"NU\n");
    }
    return 0;
}