Cod sursa(job #3267108)

Utilizator darian4444Verniceanu Darian darian4444 Data 11 ianuarie 2025 09:39:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

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

int N,M,parent[100005],h[100005],i,j,type,a,b;

int Find(int x){
        if (parent[x] == x) return x;
        return parent[x] = Find(parent[x]);
}

void Join(int a,int b){
        a = Find(a);
        b = Find(b);

        if (a == b) return;

        if (h[a] > h[b])
                parent[b] = a;
        else if (h[a] < h[b])
                parent[a] = b;
        else{
                parent[a] = b;
                h[a]++;
        }
}

bool Same(int a,int b){
        return Find(a) == Find(b);
}

int main()
{
    fin >> N >> M;

    for (i = 1;i <= N;i++){
        parent[i] = i;
        h[i] = 0;
    }

    for (i = 1;i <= M;i++){
        fin >> type >> a >> b;

        if (type == 1){
            Join(a,b);
        }
        else if (Same(a,b))
                fout << "DA\n";
        else
                fout << "NU\n";
    }

    return 0;
}