Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/aaaaa0498 | Monitorul de evaluare | Cod sursa (job #697989) | Cod sursa (job #2977029)
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("dijoint.out");
int n, m;
int h[100001], t[100001];
int radacina(int x)
{
int rez = x;
vector<int> drum;
while (t[rez] != rez)
{
drum.push_back(rez);
rez = t[rez];
}
for (int i : drum)
{
t[i] = rez;
}
return rez;
}
void reuniune(int i, int j)
{
int r1 = radacina(i);
int r2 = radacina(j);
if (h[r1] > h[r2]) t[r2] = r1;
else if (h[r1] < h[r2]) t[r1] = r2;
else
{
t[r2] = r1;
h[r1]++;
}
}
int main()
{
int x, y, c;
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
h[i] = 1;
t[i] = i;
}
for (int i = 1; i <= m; i++)
{
fin >> c >> x >> y;
if (c == 1) reuniune(x, y);
else
{
int r1 = radacina(x);
int r2 = radacina(y);
if (r1 == r2) fout << "DA" << '\n';
else fout << "NU" << '\n';
}
}
}