Pagini recente » Cod sursa (job #2655594) | Cod sursa (job #1267390) | Cod sursa (job #2661866) | Cod sursa (job #107353) | Cod sursa (job #1957117)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int NMax = 1e5 + 5;
int T,N,M;
int dad[NMax],nrSub[NMax];
int findRoot(int);
void unite(int,int);
int main() {
in>>N>>M;
for (int i=1;i<=N;++i) {
dad[i] = i;
nrSub[i] = 1;
}
while (M--) {
int tip,a,b;
in>>tip>>a>>b;
if (tip == 1) {
unite(findRoot(a),findRoot(b));
}
else {
if (findRoot(a) == findRoot(b)) {
out<<"DA\n";
}
else {
out<<"NU\n";
}
}
}
in.close();out.close();
return 0;
}
int findRoot(int nod) {
if (dad[nod] == nod) {
return nod;
}
dad[nod] = findRoot(dad[nod]);
return dad[nod];
}
void unite(int r1,int r2) {
if (nrSub[r1] > nrSub[r2]) {
dad[r2] = r1;
nrSub[r1] += nrSub[r2];
}
else {
dad[r1] = r2;
nrSub[r2] += nrSub[r1];
}
}