Cod sursa(job #2223082)

Utilizator ShutterflyFilip A Shutterfly Data 19 iulie 2018 03:09:28
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <iomanip>
#include <set>
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;

///problema de tip trofacil.

int elemin[100001];
int mult[100001];
int multcnt;

int main () {
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    int n, q;
    scanf("%d%d", &n, &q);

    for (int i = 0; i < q; i++) {
        int op;
        int x, y;
        scanf("%d%d%d", &op, &x, &y);
        if (op == 1) {
        if (elemin[x] == 0 && elemin[y] == 0) {
            multcnt++;
            elemin[x] = multcnt;
            elemin[y] = multcnt;
        } else if (elemin[x] == 0) {
            elemin[x] = elemin[y];
        } else if (elemin[y] == 0) {
            elemin[y] = elemin[x];
        } else {
            if (elemin[x] < elemin[y])
                mult[elemin[y]] = elemin[x];
            else
                mult[elemin[x]] = elemin[y];
        }
        } else {
            int futureelem = mult[elemin[x]];
            while (futureelem != 0) {
                elemin[x] = futureelem;
                futureelem = mult[elemin[x]];
            }
            futureelem = mult[elemin[y]];
            while (futureelem != 0) {
                elemin[y] = futureelem;
                futureelem = mult[elemin[y]];
            }

            if (elemin[x] == elemin[y])
                printf ("DA\n");
            else
                printf ("NU\n");
        }
    }
}