Pagini recente » Cod sursa (job #1087963) | Cod sursa (job #2337396) | Cod sursa (job #2693284) | Cod sursa (job #1531710) | Cod sursa (job #2685838)
#include <iostream>
#include <bits/stdc++.h>
#define MAX 100002
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int N,M;
vector<int> tata;
vector<int> h;
void initializare()
{
tata.resize(MAX);
h.resize(MAX);
fill(tata.begin(),tata.end(),0);
fill(h.begin(),h.end(),0);
}
int reprez(int nod)
{
while(tata[nod]!=0)
{
nod = tata[nod];
}
return nod;
}
void echilibreaza(int nod, int nou)
{ int aux;
while(tata[nod]!=0)
{ aux = nod;
nod = tata[nod];
tata[aux] = nou;
}
}
void reuneste(int a, int b)
{
int r1 = reprez(a);
int r2 = reprez(b);
if(h[r1]>h[r2])
{ echilibreaza(b,r1);
tata[r2]=r1;
}
else
{ echilibreaza(a,r2);
tata[r1]=r2;
if(h[r1]==h[r2])
h[r2]++;
}
}
int main()
{
int x,y,cod;
initializare();
in>>N>>M;
for(int i=1; i<=M; i++)
{
in>>cod>>x>>y;
if(cod==1)
reuneste(x,y);
else if(reprez(x)==reprez(y))
out<<"DA\n";
else
out<<"NU\n";
}
return 0;
}