Pagini recente » Cod sursa (job #1735815) | Cod sursa (job #2846137) | Cod sursa (job #2145237) | Cod sursa (job #3189384) | Cod sursa (job #1752951)
//
// main.cpp
// 09 Paduri de multimi disjuncte
//
// Created by Sorin Sebastian Mircea on 05/09/16.
// Copyright © 2016 Sorin Sebastian Mircea. All rights reserved.
//
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
#define MAXN 100000
int n, m;
int parinte[MAXN], rang[MAXN];
int cauta(int x) {
int ant, org, aux;
org = parinte[x];
//Gasesc radacina arborelui
while(parinte[org] != org )
org = parinte[org];
//Schimb fiecare parinte al arborelui direct cu radacina
ant = x;
while(parinte[ant] != ant) {
aux = parinte[ant];
parinte[ant] = org;
ant = aux;
}
return org;
}
void uneste(int x, int y) {
if(rang[x] > rang[y])
parinte[y] = x;
else
parinte[x] = y;
rang[y]++;
}
int main() {
int i, tip, x, y;
cin >> n >> m;
for(i=1; i<=n; i++) {
parinte[i] = i;
rang[i] = i;
}
for(i=1; i<=m; i++) {
cin >> tip >> x >> y;
if(tip == 1) {
uneste(cauta(x), cauta(y));
}
if(tip == 2) {
if(cauta(x) == cauta(y))
cout<<"DA\n";
else
cout<<"NU\n";
}
}
return 0;
}