Pagini recente » Cod sursa (job #2672088) | Cod sursa (job #3148055) | Cod sursa (job #800582) | Cod sursa (job #2965635) | Cod sursa (job #2094730)
#include <iostream>
#include <fstream>
#define mx 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int T[mx], L[mx], n, m;
int Find(int x)
{
int R, y;
for(R = x; T[R] != R; R = T[R]); // gasire radacina
while(T[x] != x)
{
y = T[x]; // compresie drum
T[x] = R;
x = y;
}
return R;
}
void Union(int x, int y)
{
if(L[x] > L[y])
T[y] = x;
else
T[x] = y;
if(L[x] == L[y]) ++L[y];
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; ++i)
{
T[i] = i;
L[i] = 1;
}
for(; m; --m)
{
int cod, x, y;
f >> cod >> x >> y;
if(cod == 1)
{
int xx = Find(x), yy = Find(y);
if(xx != yy)
Union(xx, yy);
}
else
{
if(Find(x) == Find(y))
g << "DA\n";
else g << "NU\n";
}
}
}