Pagini recente » Cod sursa (job #3208032) | Solutii preONI 2007, Runda 1 | Solutii preONI 2007, Runda 1 | Cod sursa (job #1838468) | Cod sursa (job #714976)
Cod sursa(job #714976)
#include <cstdio>
#define nMax 100010
using namespace std;
int n;
int rad[nMax];
int nivMax[nMax];
int radacina(int x)
{
int r = x;
while (rad[r] != r){
r = rad[r];
}
int y;
while (rad[x] != x)
{
y = rad[x];
rad[x] = r;
x = y;
}
return r;
}
void reuniune (int x, int y)
{
if (nivMax[x] > nivMax[y]){
rad[y] = x;
return;
}
if (nivMax[x] < nivMax[y]){
rad[x] = y;
return;
}
rad[y] = x;
nivMax[x] ++;
}
void citire()
{
int m;
scanf ("%d %d", &n, &m);
for (int i = 1; i <= n; ++ i){
rad[i] = i;
nivMax[i] = 1;
}
while (m --){
int caz;
int x;
int y;
scanf ("%d %d %d", &caz, &x, &y);
if (caz == 1){
reuniune (radacina(x), radacina(y));
}else{
if (radacina(x) != radacina(y)){
printf ("NU\n");
}else{
printf ("DA\n");
}
}
}
}
int main()
{
freopen ("disjoint.in", "r", stdin);
freopen ("disjoint.out", "w", stdout);
citire();
return 0;
}