Pagini recente » Solutii preONI 2006 - Runda a 2-a | Cod sursa (job #1922034) | Cod sursa (job #2883553) | Cod sursa (job #409232) | Cod sursa (job #2447845)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int tata[100005], inaltime[100005];
int get_king(int x)
{
if (tata[x] == x)
return x;
tata[x] = get_king(tata[x]);
return tata[x];
}
int main()
{
int n, m;
f >> n >> m;
for (int i = 1; i <= n; ++ i)
tata[i] = i;
while (m --)
{
int cod, x, y;
f >> cod >> x >> y;
if (cod == 1)
{
int a1, a2;
a1 = get_king(x);
a2 = get_king(y);
if (a1 == a2)
continue;
if (inaltime[a1] < inaltime[a2])
tata[a1] = a2;
else
tata[a2] = a1;
if (inaltime[a1] == inaltime[a2])
inaltime[a1] ++;
}
else
{
int a1, a2;
a1 = get_king(x);
a2 = get_king(y);
if (a1 == a2)
g << "DA";
else
g << "NU";
g << '\n';
}
}
}