Pagini recente » Monitorul de evaluare | Cod sursa (job #387766) | Cod sursa (job #1461846) | Cod sursa (job #1962212) | Cod sursa (job #1207052)
#include <fstream>
using namespace std;
int N,M; int uf[100100],rang[100100];
int cauta(int x){
int tata=x,aux;
while (uf[tata]!=tata) tata=uf[tata];
while(uf[x]!=x){
aux=uf[x];
uf[x]=tata;
x=aux;
}
return tata;
}
void uneste(int x, int y){
if (rang[x] > rang[y]) uf[y]=x;
else uf[x]=y;
if (rang[x]==rang[y]) rang[y]++;
}
int main()
{
ifstream in("disjoint.in");
ofstream out("disjoint.out");
in >> N >> M;
int i,op,x,y;
for (i=1; i<=N; i++){
uf[i]=i;
rang[i]=1;
}
for (i=1; i<=M; i++){
in >> op >> x >> y;
if (op==1) uneste(x,y);
else if (cauta(x)==cauta(y)) out << "DA" << "\n";
else out << "NU" << "\n";
}
return 0;
}