Pagini recente » Cod sursa (job #1309002) | Cod sursa (job #118178) | Cod sursa (job #636403) | Cod sursa (job #1654975) | Cod sursa (job #2424060)
#include <iostream>
#include <fstream>
#include <cstring>
#define nmax 100000
using namespace std;
int N, M;
int tati[nmax];
int grad[nmax];
int find(int nod) {
if (tati[nod] == nod)
return nod;
else
{
int t = find(tati[nod]);
tati[nod] = t;
return t;
}
}
void reuniune(int a, int b) {
int ta = find(a);
int tb = find(b);
if (grad[ta] < grad[tb]) {
tati[ta] = tb;
grad[tb] += grad[ta];
}
else {
tati[tb] = ta;
grad[ta] += tb;
}
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f >> N >> M;
for (int i = 1; i <= N; ++i) {
tati[i] = i;
grad[i] = 1;
}
for(int i = 1; i <= M; ++i) {
int op, a, b;
f >> op >> a >> b;
if(op == 1)
reuniune(a, b);
else
{
if (find(a) == find(b)) g << "DA" << endl;
else g << "NU" << endl;
}
}
return 0;
}