Pagini recente » Cod sursa (job #678271) | Cod sursa (job #1971328) | Cod sursa (job #3159364) | Cod sursa (job #3294331) | Cod sursa (job #2000398)
#include <fstream>
#include <iostream>
#define MAXSZ 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int findSet(int x, int T[]) {
//
if (T[x] == x) return T[x];
T[x] = findSet(T[x], T);
return T[x];
}
void join(int x, int y, int T[], int size[]) {
//
int set1 = findSet(x, T);
int set2 = findSet(y, T);
// cout << set1 << " " << set2 << endl;
if (set1 != set2) {
if (size[set1] < size[set2]) {
T[set1] = set2;
}
else {
T[set2] = set1;
}
int aux = size[set1];
size[set1] += size[set2];
size[set2] += aux;
}
}
bool checkSameSet(int x, int y, int T[]) {
//
cout << "Check same set " << x << " " << y << endl;
int set1 = findSet(x, T);
cout << "Check same set " << x << " " << y << endl;
int set2 = findSet(y, T);
return (set1 == set2);
}
void init(int T[], int size[], int n) {
//
for (int i = 1; i <= n; i++) {
T[i] = i;
size[i] = 1;
}
}
int main() {
//
int n, T[MAXSZ], m;
int size[MAXSZ];
f >> n >> m;
init(T, size, n);
for (int i = 1; i <= m; i++) {
//
int op, x, y;
f >> op >> x >> y;
switch (op) {
case 1:
join(x, y, T, size);
break;
case 2:
bool same = checkSameSet(x, y, T);
g << (same ? "DA" : "NU") << endl;
break;
}
}
}