Pagini recente » Cod sursa (job #2427425) | Cod sursa (job #2424912) | Cod sursa (job #2427430) | Cod sursa (job #2423396) | Cod sursa (job #2696774)
#include<bits/stdc++.h>
using namespace std;
const int NMAX = 100100;
int sef[NMAX];
// initializeaza vecotorul de sefi
void Init(int n)
{
for (int i = 0; i< n; i++)
sef[i] = i;
}
// Gaseste seful suprem al nodului
int Find(int nod)
{
while(sef[nod] != nod)
nod = sef[nod];
return nod;
// OR
if (sef[nod] == nod)
return nod;
return Find(sef[nod]);
}
// Returneaza false daca cele doua noduri sunt deja unite
// Returneaza true si le uneste daca nu
bool Unite(int a, int b)
{
a = Find(a);
b = Find(b);
if (a == b)
return false;
sef[a] = b;
return true;
}
int main()
{
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, m;
cin >> n >> m;
Init(n + 1);
for(int i = 0; i < m; i++) {
int op, a, b;
cin >> op >> a >> b;
if (op == 1) {
Unite(a, b);
}
else {
a = Find(a);
b = Find(b);
if (a == b)
cout << "DA\n";
else
cout << "NU\n";
}
}
return 0;
}