Cod sursa(job #3315997)

Utilizator Mihaita09Nechitescu Mihai Mihaita09 Data 16 octombrie 2025 19:50:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

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

#define cin fin
#define cout fout


int n,m,x,y;
int repr[100001],dim[100001];

int get_repr(int x) {
	if (repr[x] == x)
		return x;
	repr[x]=get_repr(repr[x]);
	return repr[x];
}


void op1(int x, int y)
{
    int a = get_repr(x);
    int b = get_repr(y);
    if (dim[a] > dim[b])
    {
        repr[b] = a;
        dim[a]+=dim[b];
    }
    else{
        repr[a] = b;
        dim[b]+=dim[a];
    }
}

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        dim[i] = 1;
        repr[i] = i;
    }
    int op,x,y;
    for (int i = 1 ; i <= m; i++)
    {
        cin >> op >> x >> y;
        if (op == 1)
        {
            op1(x,y);
        }
        else{
            if (get_repr(x) == get_repr(y)) cout << "DA" << '\n';
            else cout << "NU" << '\n';
        }
    }

}