Pagini recente » Istoria paginii runda/la_intamplare1 | Cod sursa (job #1220098) | Cod sursa (job #1294063) | Cod sursa (job #1244697) | Cod sursa (job #2714982)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("distante.in");
ofstream out ("distante.out");
int rang[100001], tata[100001];
int n, m;
void unite (int a, int b)
{
if (rang[a] >= rang[b])
tata[a] = b;
else
tata[b] = a;
if (rang[a] == rang[b])
rang[a]++;
}
int Find (int a)
{
int rad = tata[a];
while (rad != tata[rad])
rad = tata[rad];
while (a != rad)
{
int cop = a;
a = tata[a];
tata[cop] = 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;
}