Pagini recente » Cod sursa (job #283866) | Cod sursa (job #2102981) | Cod sursa (job #685197) | Cod sursa (job #527216) | Cod sursa (job #2942912)
#include <bits/stdc++.h>
using namespace std;
int NrNodes;
int Fathers[100020], Heights[100020];
int Find(int Node) {
if(Fathers[Node] == 0)
return Node;
Fathers[Node] = Find(Fathers[Node]);
return Fathers[Node];
}
void Union(int NodeX, int NodeY) {
if(Heights[NodeX] > Heights[NodeY]){
Fathers[NodeY] = NodeX;
} else{
Fathers[NodeX] = NodeY;
}
if(Heights[NodeX] == Heights[NodeY])
Heights[NodeX]++;
}
int main() {
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
fin >> NrNodes;
for(int i = 1; i <= NrNodes; i++){
Fathers[i] = 0;
Heights[i] = 1;
}
int M;
fin >> M;
for(int i = 0; i < M; i++){
int cod, X, Y;
fin >> cod >> X >> Y;
int fatherX = Find(X), fatherY = Find(Y);
if(cod == 1){
Union(fatherX,fatherY);
} else{
if( fatherX== fatherY)
fout << "DA" << endl;
else
fout << "NU" << endl;
}
}
fin.close();
fout.close();
return 0;
}