Pagini recente » Cod sursa (job #1145629) | Cod sursa (job #605317) | Cod sursa (job #651627) | Cod sursa (job #1214208) | Cod sursa (job #3174574)
#include <iostream>
#include <fstream>
#define nl '\n'
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 1e5+1;
int n, q;
int sz[NMAX], tata[NMAX];
int findd(int nod)
{
if (nod == tata[nod])
return nod;
return tata[nod] = findd(tata[nod]);
}
void unite(int u, int v)
{
u = findd(u);
v = findd(v);
if (u != v)
{
if (sz[u] < sz[v])
swap(u, v);
tata[v] = u;
sz[u] += sz[v];
}
return;
}
bool sameSet(int u, int v)
{
u = findd(u);
v = findd(v);
return (u == v);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
fin >> n >> q;
for (int i = 1; i <= n; i++)
{
sz[i] = 1;
tata[i] = i;
}
while (q--)
{
int p, u, v;
fin >> p >> u >> v;
if (p == 1)
unite(u, v);
else
{
bool flag = sameSet(u, v);
if (flag)
fout << "DA";
else
fout << "NU";
fout << nl;
}
}
return 0;
}