Pagini recente » Cod sursa (job #1896619) | Cod sursa (job #1973768)
#include <iostream>
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
#define pb push_back
typedef long long ll;
const int NMax = 1e5 + 5;
const int inf = 1e9 + 5;
int N,M;
int dad[NMax],nr[NMax];
void unite(int,int);
int findRoot(int);
int main() {
in>>N>>M;
for (int i=1;i<=N;++i) {
dad[i] = i;
nr[i] = 1;
}
while (M--) {
int tip,x,y;
in>>tip>>x>>y;
if (tip == 1) {
unite(x,y);
}
else {
out<<((findRoot(x) == findRoot(y)) ? "DA\n" : "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 x,int y) {
int rt1 = findRoot(x),
rt2 = findRoot(y);
if (nr[rt1] > nr[rt2]) {
nr[rt1] += nr[rt2];
dad[rt2] = rt1;
}
else {
nr[rt2] += nr[rt1];
dad[rt1] = rt2;
}
}