Cod sursa(job #2721670)
| Utilizator | Data | 12 martie 2021 08:27:38 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.51 kb |
#include <fstream>
#define mF "disjoint"
std::ifstream in(mF ".in");
std::ofstream out(mF ".out");
constexpr int N = 100000; int V[N];
int R(int e) {if (0 <= V[e]) return V[e] = R(V[e]); return e;}
#include <algorithm>
int main()
{
int n, m; in >> n >> m; std::fill(V, V + n, -1); while (m--)
{
int o, a, b; in >> o >> a >> b; a = R(a-1); b = R(b-1);
if (o == 1) {if (V[a] < V[b]) std::swap(a, b); V[b] += V[a]; V[a] = b;}
else out << (a == b? "DA": "NU") << '\n';
}
}
