Pagini recente » Cod sursa (job #3031093) | Cod sursa (job #1088867) | Cod sursa (job #3295120) | Cod sursa (job #2313566) | Cod sursa (job #3309579)
#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];
DSU(int n){
for (int i=1; i<=n; i++)
rep[i]=i;
}
int get_rep(int node){ // returneaza reprezentantul suprem pt node
if (rep[node]==node)
return node;
return 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;
rep[rb]=ra;
}
};
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;
}