Pagini recente » Istoria paginii runda/ems1/clasament | Monitorul de evaluare | Istoria paginii runda/oji__sim | Istoria paginii runda/preorange | Cod sursa (job #2247019)
#include <bits/stdc++.h>
using namespace std;
int radacina[100001],numberOfNodesInATree[100001];
void intialisation(int nodes){
for(int i = 1; i<= nodes; i++){
radacina[i] = i;
numberOfNodesInATree[i] = 1;
}
}
int father (int nod){
int tata = nod;
while(radacina[tata] != tata){
tata = radacina[tata];
}
while (radacina[nod] != nod){
int auxiliar;
auxiliar = nod;
nod = radacina[nod];
radacina[auxiliar] = tata;
}
}
void unire (int a ,int b){
int c = father(a);
int d = father(b);
if (c == d){
return;
}
if (numberOfNodesInATree[c] < numberOfNodesInATree[d]){
radacina[c] = d;
}
else{
radacina[d] = c;
}
if (numberOfNodesInATree[c] == numberOfNodesInATree[d]){
numberOfNodesInATree[c] ++;
}
}
int main() {
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
f >> n >> m;
intialisation(n);
for(int i = 1; i <= m; i ++){
int x, y, op;
f >> op >> x >> y;
if (op == 1){
unire(x, y);
}
else{
if(father(x) == father(y)){
g << "DA\n";
}
else{
g << "NU\n";
}
}
}
return 0;
}