Pagini recente » Cod sursa (job #477303) | Cod sursa (job #567595) | Cod sursa (job #729532) | Cod sursa (job #2545131) | Cod sursa (job #2854375)
#include <fstream>
#include <deque>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <cmath>
#include <climits>
#define MOD 104659
using namespace std ;
ifstream cin ("disjoint.in") ;
ofstream cout ("disjoint.out") ;
int n, tatal[100009], nivele[100009] ;
int auxglob ;
int tatal_suprem(int nod) /// cat timp faci cauti tatal suprem mai si aplatizezi arborele
{
if(tatal[nod] == 0)
{
auxglob = nod ;
return nod ;
}
int rez ;
rez = tatal_suprem(tatal[nod]) ;
tatal[nod] = auxglob ;
return rez ;
}
void merg(int a, int b)
{
/// trebe sa vedem care dintre multimiile a si b are mai multe nivele
int tsa = tatal_suprem(a), tsb = tatal_suprem(b) ;
if(nivele[tsa] > nivele[tsb])
{
tatal[tsb] = tsa ;
}
else if(nivele[tsb] > nivele[tsa])
{
tatal[tsa] = tsb ;
}
else /// sunt egale nivelele
{
tatal[tsa] = tsb ;
nivele[tsa] ++ ;
}
}
int main()
{
int q ;
cin >> n >> q ;
while(q --)
{
int a, b, c ;
cin >> a >> b >> c ;
if(a == 1) /// sa se dea merge la multimile care il contin pe c si pe b
{
merg(b, c) ;
}
if(a == 2) /// DA/NU daca sunt b si c in aceeasi mulitme
{
if(tatal_suprem(b) == tatal_suprem(c))cout << "DA" << '\n' ;
else cout << "NU" << '\n' ;
}
}
return 0 ;
}
/*
*/