Pagini recente » Cod sursa (job #1436322) | Cod sursa (job #2518887) | Cod sursa (job #625781) | Cod sursa (job #1053059) | Cod sursa (job #2333598)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
static const int NMAX = 1e5+5;
int n,m;
int TT[NMAX];
int RG[NMAX];
int find(int x)
{
int R, y;
//merg in sus pe arbore pana gasesc un nod care pointeaza catre el insusi
for (R = x; TT[R] != R; R = TT[R]);
//aplic compresia drumurilor
for (; TT[x] != x;)
{
y = TT[x];
TT[x] = R;
x = y;
}
return R;
}
void unite(int x, int y)
{
int parent1 = find(x);
int parent2 = find(y);
if(parent1 == parent2)
return;
if(RG[parent1] > RG[parent2])
{
TT[parent2] = parent1;
}
else
{
TT[parent1] = parent2;
}
if(RG[parent1] == RG[parent2])
RG[parent2]++;
}
int main()
{
int cod, x, y;
fin >> n >> m;
for(int i =1; i<= n; ++i)
{
TT[i] = i;
RG[i] = 0;
}
for(int i =1; i<= m; ++i)
{
fin >> cod >> x >> y;
if(cod == 1){
unite(x,y);
}
else
{
if(find(x) == find(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}