Cod sursa(job #3298498)

Utilizator Stefan_ClaudiuStefan Claudiu Stefan_Claudiu Data 30 mai 2025 16:31:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int tata[100005];
int inaltimi[100005];

int get_nod(int nod)
{
	int root=nod;
	while(root!=tata[root])
    {
		root=tata[root];
	}
	while(nod!=root)
    {
		int nextNode=tata[nod];
		tata[nod]=root;
		nod=nextNode;
	}
	return root;
}

void unire(int x, int y)
{
	int rootX=get_nod(x);
	int rootY=get_nod(y);

	if(inaltimi[rootX]<inaltimi[rootY])
    {
		tata[rootX]=rootY;
	}
    else if (inaltimi[rootX]>inaltimi[rootY])
    {
		tata[rootY]=rootX;
	}
    else
    {
		tata[rootX]=rootY;
		inaltimi[rootY]=inaltimi[rootY]+1;
	}
}

int main()
{
	int n, m;
	fin >> n >> m;
	for (int i = 1; i <= n; ++i)
    {
		tata[i] = i;
		inaltimi[i] = 1;
	}
	for (int i = 0; i < m; ++i)
    {
		int op, x, y;
		fin >> op >> x >> y;
		if (op == 1)
        {
			unire(x, y);
		}
        else
        {
			if (get_nod(x) == get_nod(y))
            {
				fout << "DA"<<endl;
			}
            else
            {
				fout << "NU"<<endl;
			}
		}

	}
    fin.close();
    fout.close();
	return 0;
}