Pagini recente » Cod sursa (job #2986448) | Cod sursa (job #2861752) | Cod sursa (job #1874871) | Cod sursa (job #6984) | Cod sursa (job #2312044)
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
class DSet
{
public:
vector<int> repr;
void s_union(int x, int y)
{
if(repr[x] == repr[y])
return;
repr[repr[y]] = repr[x];
}
bool disjoint(int a, int b)
{
return findSet(a) != findSet(b);
}
int findSet(int x)
{
int chain = x;
while(repr[x] != x)
{
x = repr[x];
}
while(repr[chain] != x)
{
int aux = repr[chain];
repr[chain] = x;
chain = aux;
}
return x;
}
DSet(int n)
{
for(int i = 0; i <= n; ++i)
repr.push_back(i);
}
};
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m;
scanf("%d", &n);
scanf("%d", &m);
DSet dSet(n);
for(int i = 0; i < m; ++i)
{
int op, x, y;
scanf("%d", &op);
scanf("%d", &x);
scanf("%d", &y);
if(op == 1)
{
dSet.s_union(x, y);
}
else
{
if(dSet.disjoint(x, y))
printf("NU\n");
else
printf("DA\n");
}
}
return 0;
}