Pagini recente » Cod sursa (job #3241756) | Cod sursa (job #3151384) | Cod sursa (job #1591796) | Cod sursa (job #816345) | Cod sursa (job #2681441)
#include <iostream>
#include <fstream>
#include <bitset>
#define CIUR 1001000
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int t[100010];
int a, b, ra, rb, n, m, i, tip;
int rad(int x) { /// returnreaza radacina arborelui in care este nodul x
while(t[x] > 0)
x = t[x];
return x;
}
int main (){
fin>>n>>m;
for (i=1;i<=n;i++)
t[i] = -1;
while (m--) {
fin>>tip>>a>>b;
ra = rad(a);
rb = rad(b);
/// daca la unire pastrez mereu ca radacina
/// pe cea a arborelui cu mai multe noduri
/// este demonstrat ca mereu inaltimea
/// ramane de ordin log n
if (tip == 1) {
if (ra != rb) {
if (-t[ra] > -t[rb]) {
/// a ramane radacina
t[ra] += t[rb];
t[rb] = ra;
} else {
t[rb] += t[ra];
t[ra] = rb;
}
}
} else {
if (ra == rb)
fout<<"DA\n";
else
fout<<"NU\n";
}
}
return 0;
}