Cod sursa(job #1626462)

Utilizator GeorgianBaditaBadita Marin-Georgian GeorgianBadita Data 3 martie 2016 09:07:15
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>
#define NMAX 100005
using namespace std;

FILE *f = freopen("disjoint.in", "r", stdin);
FILE *g = freopen("disjoint.out", "w", stdout);

int N, M;
int Father[NMAX];

int find_(int x)
{
    int rad;
    rad = x;
    while(rad != Father[rad])
        rad = Father[rad];
    return rad;
}

void unite_(int x, int y)
{
        Father[find_(x)] = find_(y);
}
int main()
{
    scanf("%d%d", &N, &M);
    for(int i = 1; i<=N; i++) Father[i] = i;
    int op, x, y;
    while(M)
    {
        M--;
        scanf("%d%d%d", &op, &x, &y);
        if(op == 2) {
            if(find_(x) == find_(y)) printf("DA\n");
            else printf("NU\n");
        }
        else {
            unite_(x, y);
        }
    }
    return 0;
}