Cod sursa(job #3152137)

Utilizator davidgeo123Georgescu David davidgeo123 Data 24 septembrie 2023 08:35:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

vector <int> par;
vector <int> sz;

void initialize (int n)
{
	par.resize(n+1);
	sz.resize(n+1 , 1);
	for (int i = 1; i <= n; i++)
	{
		par[i] = i;
	}
}

int Find (int nod)
{
	if (par[nod] == nod) return nod;
	else return par[nod] = Find(par[nod]);
}

void unite (int x , int y)
{
	int repX = Find(x) , repY = Find(y);
    //if (s[repX] < s[repY]) swap(repX , repY);
	if (repX != repY)
    {
	if(sz[repX] > sz[repY])
		par[repY]=repX, sz[repX]+=sz[repY];
    else
        par[repX]=repY, sz[repY]+=sz[repX];
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    int n, m;
    cin>>n>>m;
    initialize(n);
    int caz, a, b;
    for(int i=1; i<=m; i++)
    {
        cin>>caz>>a>>b;
        if(caz==1)
            unite(a, b);
        else
            cout<<(Find(a)==Find(b) ? "DA\n" : "NU\n");
    }
    return 0;
}