Pagini recente » Cod sursa (job #538102) | Cod sursa (job #1129995) | Cod sursa (job #277134) | Cod sursa (job #2750535) | Cod sursa (job #1931582)
#include <cstdio>
#include <algorithm>
using namespace std;
class Disjoint{
private:
int parinti[100005];
int adancimi[100005];
int n;
int findRoot(int x)
{
int xx = x;
while(parinti[xx] != xx)
{
xx = parinti[xx];
}
int tmp;
while(parinti[x] != x)
{
tmp = parinti[x];
parinti[x] = xx;
x = tmp;
}
return xx;
}
public:
Disjoint(int _n)
{
n = _n;
for(int i = 0; i <= n; i++)
{
parinti[i] = i;
adancimi[i] = 1;
}
}
bool sameTree(int x, int y)
{
if(findRoot(x) == findRoot(y))
{
return true;
}
return false;
}
void unire(int x, int y)
{
int tata1 = findRoot(x);
int tata2 = findRoot(y);
if(adancimi[tata1] == adancimi[tata2])
{
parinti[tata1] = tata2;
adancimi[tata2]++;
}
else if(adancimi[tata1] < adancimi[tata2])
{
parinti[tata1] = tata2;
}
else
{
parinti[tata2] = tata1;
}
}
};
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m;
scanf("%d %d", &n, &m);
Disjoint multime1 = Disjoint(n);
int tmp1, tmp2, tmp3;
for(int k = 0; k < m; k++)
{
scanf("%d %d %d", &tmp1, &tmp2, &tmp3);
if(tmp1 == 1)
{
multime1.unire(tmp2, tmp3);
}
else if(tmp1 == 2)
{
if(multime1.sameTree(tmp2, tmp3) == true)
{
printf("DA\n");
}
else
{
printf("NU\n");
}
}
else
{
printf("WTF DUDE?");
}
}
return 0;
}