Pagini recente » Cod sursa (job #397998) | Cod sursa (job #1588619) | Cod sursa (job #1055485) | Cod sursa (job #2047877) | Cod sursa (job #3041067)
#include <fstream>
#include <vector>
#define NMAX 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int cod, x, y;
int t[NMAX];
int rang[NMAX];
int i, j;
int radacina(int);
void unire(int, int);
int main()
{
fin >>n>>m;
for (i = 1; i <= m; ++i)
{
fin >>cod>>x>>y;
if (cod == 1) unire(x, y);
else
fout <<(radacina(x) == radacina(y)? "DA": "NU")<<'\n';
}
fout.close();
return 0;
}
int radacina(int vf)
{
if (!t[vf]) return vf;
int x = radacina(t[vf]);
t[vf] = x;
return x;
}
void unire(int x, int y)
{
int r1 = radacina(x), r2 = radacina(y);
if (r1 != r2)
if (rang[r1] < rang[r2])
t[r1] = r2;
else
{
t[r2] = r1;
if (rang[r1] == rang[r2]) rang[r1] ++;
}
}