Pagini recente » Cod sursa (job #2394373) | Cod sursa (job #2324794) | Cod sursa (job #1774454) | Cod sursa (job #227406) | Cod sursa (job #1790566)
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
int AflaRadacina(vector<int> &tati, int x)
{
int cx = x;
while (tati[x] != 0)
x = tati[x];
while (cx != x) {
int urm = tati[cx];
tati[cx] = x;
cx = urm;
}
return x;
}
void Reuneste(vector<int> &tati, int x, int y)
{
int rx = AflaRadacina(tati, x);
if (rx == 0) rx = x;
int ry = AflaRadacina(tati, y);
if (ry == 0) ry = y;
tati[ry] = rx;
}
inline bool MultimeComuna(vector<int> &tati, int x, int y)
{
int rx = AflaRadacina(tati, x);
int ry = AflaRadacina(tati, y);
return rx == ry && rx != 0;
}
int main()
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
fin >> n >> m;
vector<int> tati(n + 1, 0);
while (m--) {
int r, x, y;
fin >> r >> x >> y;
if (r == 1)
Reuneste(tati, x, y);
else fout << (MultimeComuna(tati, x, y) ? "DA" : "NU") << "\n";
}
return 0;
}