Pagini recente » Cod sursa (job #2542764) | Cod sursa (job #1990579) | Cod sursa (job #874047) | Cod sursa (job #2899698) | Cod sursa (job #2646075)
#include <stdio.h>
#include <fstream>
#include <iostream>
using namespace std;
const int NLIM = 100005;
int graf[NLIM], rang[NLIM];
int n, m;
int findd(int nod){
int nextnod, y;
//cout << nextnod << " " << graf[nextnod] << "\n";
for(nextnod = nod; graf[nextnod] != nextnod; nextnod = graf[nextnod]){
// cout << nextnod << " " << graf[nextnod] << "\n";
}
for(; graf[nod] != nod;){
y = graf[nod];
graf[nod] = nextnod;
nod = y;
}
return nextnod;
}
void unit(int x, int y){
if(rang[x] > rang[y])
graf[y] = x;
else
graf[x] = y;
if(rang[x] == rang[y])
++rang[y];
}
int main() {
//ifstream fin("date.in");
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
fin >> n >> m;
for(int i = 1; i <= n; ++i){
graf[i] = i;
rang[i] = 1;
}
for(int i = 1; i <= m; ++i){
int cod, x, y;
fin >> cod >> x >> y;
if(cod == 1){
if(findd(x) != findd(y))
unit(findd(x), findd(y));
}
else{
if(findd(x) == findd(y))
fout << "DA" << "\n";
else
fout << "NU" << "\n";
}
/*for(int i =1; i <= n; ++i)
cout << graf[i] << " ";
cout << "\n";
for(int i =1; i <= n; ++i)
cout << rang[i] << " ";
cout << "\n";*/
}
return 0;
}