Cod sursa(job #2682832)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 9 decembrie 2020 18:37:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include<bits/stdc++.h>
#define god dimasi5eks
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
 
#define fisier 1
 
using namespace std;
 
typedef long long ll;
 
const int mod = 1000000007;
const double dancila = 3.14159265359; // PI 
const double eps = 1e-9;
 
int n, m;
int rad[100002], card[100002];
 
int Find(int x)
{
	if(rad[x] == x)
		return x;
	rad[x] = Find(rad[x]);
	return rad[x];
}
void Union(int a, int b)
{
	if(card[a] < card[b])
		swap(a, b);
	rad[b] = a;
	card[a] += card[b];
}
int main()
{
	#ifdef fisier
		ifstream cin("disjoint.in");
		ofstream cout("disjoint.out");
	#endif
	
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	
	cin >> n >> m;
	
	for(int i = 1; i <= n; ++i)
		rad[i] = i, card[i] = 1;
	
	for(int i = 1; i <= m; ++i)
	{
		int cod, x, y;
		cin >> cod >> x >> y;
		if(cod == 1)
		{
			if(Find(x) != Find(y))
				Union(Find(x), Find(y));
		}
		else
		{
			if(Find(x) == Find(y))	
				cout << "DA\n";
			else
				cout << "NU\n";
		}
	}
	return 0;
}