Cod sursa(job #961418)

Utilizator StanAndreiAndrei Stan StanAndrei Data 12 iunie 2013 09:40:50
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>

using namespace std;

#define NMAX 100005

int N,T[NMAX],M;

void unite(int i,int j)
{
    T[i]=j;
}

int find(int x)
{
    int r=x;
    while (T[r]) r=T[r];

    int y=x,t;
    while (y!=r)
    {
        t=T[y];
        T[y]=r;
        y=t;

    }
    return r;
}

int main()
{
    freopen ("disjoint.in","r",stdin);
    freopen ("disjoint.out","w",stdout);

    scanf("%d %d\n",&N,&M);

    int i,a,b,type;
    for (i=1;i<=M;i++)
    {
        scanf("%d %d %d\n",&type,&a,&b);
        if (type==1) unite(find(a),find(b));
        if (type==2)
            if (find(a)==find(b)) printf("DA\n");
            else printf("NU\n");
    }

    fclose(stdin);
    fclose(stdout);

    return 0;
}