Cod sursa(job #2837419)

Utilizator Ionut151Marcu Ionut Ionut151 Data 22 ianuarie 2022 10:32:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

int n,q;
int t[100001];
int h[100001];

int main()
{
    in >> n >> q;
    for(int i=1;i<=n;i++){
        t[i] = i;
        h[i] = i;
    }
    for(int i=1;i<=q;i++){
        int p,x,y;
        in >> p >> x >> y;
        int r1=x,r2=y;
        while(r1 != t[r1])
            r1 = t[r1];
        while(r2 != t[r2])
            r2 = t[r2];
        if(p == 1){
            if(h[r1] > h[r2]){
                t[r2] = r1;
            } else {
                t[r1] = r2;
                if(h[r1] == h[r2])
                    h[r2] ++;
            }
        } else {
            if(r1 == r2){
                out << "DA\n";
            } else {
                out << "NU\n";
            }
            while(x!=r1){
                int temp = t[x];
                t[x] = r1;
                x = temp;
            }
            while(y!=r2){
                int temp = t[y];
                t[y] = r2;
                y = temp;
            }
        }
    }
    return 0;
}