Cod sursa(job #1496919)

Utilizator serbanSlincu Serban serban Data 5 octombrie 2015 19:46:25
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>

using namespace std;

int v[100005];

int older(int a) {
    while(a != v[a])
        a = v[a];
    return a;
}

void mergeList(int a, int b) {
    v[older(b)] = a;
}

int main()
{
    FILE *f = fopen("disjoint.in", "r");
    FILE *g = fopen("disjoint.out", "w");
    int n, m;
    int x, y, t;
    fscanf(f, "%d %d", &n, &m);

    for(int i = 1; i <= n; i ++) {
        v[i] = i;
    }

    for(int i = 1; i <= m; i ++) {
        fscanf(f, "%d %d %d", &t, &x, &y);
        if(t == 1) mergeList(x, y);
        else {
            if(older(x) == older(y))
                fprintf(g, "DA\n");
            else fprintf(g, "NU\n");
        }
    }
    return 0;
}