Pagini recente » Cod sursa (job #1504699) | Cod sursa (job #760697) | Cod sursa (job #2734904) | Cod sursa (job #1977695) | Cod sursa (job #2693761)
#include<fstream>
#define Nmax 100010
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int reps[Nmax];
int sizes[Nmax];
int findRep(int x) {
if(x != reps[x])
reps[x] = findRep(reps[x]);
return reps[x];
}
void unite(int x, int y) {
int smaller = findRep(x);
int larger = findRep(y);
if(smaller == larger) {
return;
}
if(sizes[smaller] > sizes[larger]) {
swap(smaller, larger);
}
reps[smaller] = larger;
sizes[larger] += sizes[smaller];
}
int main() {
fin >> n >> m;
for(int i = 1; i <= n; i++) {
reps[i] = i;
sizes[i] = 1;
}
for(int i = 0; i < m; i++) {
int op, x, y;
fin >> op >> x >> y;
switch(op) {
case 1:
unite(x, y);
break;
case 2:
if(findRep(x) == findRep(y)) {
fout << "DA";
} else {
fout << "NU";
}
fout << endl;
break;
}
}
}