Pagini recente » Cod sursa (job #3209049) | Istoria paginii runda/iconcurs15 | Istoria paginii runda/ojitime/clasament | Cod sursa (job #2326698) | Cod sursa (job #2714995)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
int rang[100001], tata[100001];
int n, m;
void unite (int a, int b)
{
if (rang[a] >= rang[b])
tata[b] = a;
else
tata[a] = b;
if (rang[a] == rang[b])
rang[a]++;
}
int Find (int a)
{
int rad = a;
while (rad != tata[rad])
rad = tata[rad];
while (a != tata[a])
{
int cop = tata[a];
tata[a] = rad;
a = cop;
}
return rad;
}
int main ()
{
in >> n >> m;
for (int i = 1;i<=n;++i)
{
rang[i] = 1;
tata[i] = i;
}
for (int i = 1;i<=m;++i)
{
int c;
in >> c;
if (c == 1)
{
int a, b;
in >> a >> b;
unite(a,b);
}
else
{
int a, b;
in >> a >> b;
if (Find(a) == Find(b))
out << "DA\n";
else
out << "NU\n";
}
}
return 0;
}