Pagini recente » Cod sursa (job #863728) | Atasamentele paginii Bowling | Cod sursa (job #3223373) | Cod sursa (job #3137625) | Cod sursa (job #3309683)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
const int Nmax = 1e5+5;
int n,m;
struct DSU {
int rep[Nmax];
int sz[Nmax];
DSU (int n) {
for (int i=1;i<=n;i++) {
rep[i]=i;
sz[i]=1;
}
}
int get_rep (int node) {
if (rep[node]==node)
return node;
return rep[node]=get_rep (rep[node]);
}
bool same_set(int a, int b) {
int ra = get_rep(a);
int rb = get_rep(b);
return ra==rb;
}
void join (int a, int b) {
int ra = get_rep (a);
int rb = get_rep (b);
if (ra==rb)
return;
if (sz[ra]<sz[rb])
swap (ra, rb);
rep[ra]=rb;
sz[ra]+=sz[rb];
}
};
int main () {
fin >> n >> m;
DSU dsu(n);
int t,a,b;
while (m--) {
fin>>t>>a>>b;
if (t==1)
dsu.join (a,b);
else if (dsu.same_set(a,b))
fout<<"DA\n";
else
fout<<"NU\n";
}
return 0;
}