Cod sursa(job #2419782)

Utilizator andreeacristianaAlbu Andreea-Cristiana andreeacristiana Data 9 mai 2019 13:31:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n, m, fx, fy, x, y, operatie, tata[100003], grad[100003];
int findFather(int x)
{
	if (tata[x] == x)
		return x;
	else return findFather(tata[x]);
}

int main()
{
	in >> n >> m;

	for (int i = 1; i <= m; i++)
	{
		tata[i] = i;
		grad[i] = 1;
	}

	for (int i = 1; i <= m; i++)
	{
		in >> operatie >> x >> y;
		fx = findFather(x);
		fy = findFather(y);

		if (operatie == 1)
			{if (grad[fx] < grad[fy])
			{
				tata[fx] = fy;
				grad[fy] += grad[fx];
			}
			else
			{
				tata[fy] = fx;
				grad[fx] += grad[fy];
			}}
			else if(operatie==2)
            {
                if(findFather(x)==findFather(y))
                    out<<"DA"<<'\n';
                else out<<"NU"<<'\n';
            }
	}

	return 0;
}