Pagini recente » Cod sursa (job #824757) | Cod sursa (job #357119) | Cod sursa (job #2196352) | Cod sursa (job #2930765) | Cod sursa (job #1551742)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream o("disjoint.out");
const int nmx = 100002;
int n,m;
int tata[nmx],rang[nmx];
int grupa(int nr){
int aux = nr, tatal = nr;
while(tatal != tata[tatal])
tatal = tata[tatal];
while(nr != tata[nr]){
aux = tata[nr];
tata[nr] = tatal;
nr = aux;
}
return tatal;
}
void uneste(int g1, int g2){
if(rang[g1] > rang[g2])
tata[g2] = g1;
else
tata[g1] = g2;
if(rang[g1] == rang[g2])
++ rang[g2];
}
int main(){
f >> n >> m;
for(int i = 1; i <= n; ++i){
tata[i] = i;
rang[i] = 1;
}
int n1,n2,op,g1,g2;
for(int i = 1; i <= m; ++i){
f >> op >> n1 >> n2;
g1 = grupa(n1);
g2 = grupa(n2);
if(op == 1){
if(g1 != g2)
uneste(g1,g2);
}
else
o << ((g1 == g2) ? "DA\n" : "NU\n") ;
}
return 0;
}