Pagini recente » Cod sursa (job #930486) | Cod sursa (job #2642983) | Cod sursa (job #1477769) | Cod sursa (job #672557) | Cod sursa (job #2340229)
#include <iostream>
#include <fstream>
using namespace std;
const int Maxx=1e5+1;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int dad[Maxx];
int range[Maxx];
int n,m;
int cd,x,y;
int parent(int x){
int a,b;
for (a=x;dad[a]!=a;a=dad[a]);
//compresia drumurilor
for (;dad[x]!=x;){
b=dad[x];
dad[x]=a;
x=b;
}
return a;
}
void unite(int x,int y){
if (range[x]>range[y]) {
dad[y]=x;
} else {
dad[x]=y;
}
if (range[x]==range[y]) ++range[y];
}
int main() {
fin>>n>>m;
int i;
for (i=1;i<=n;++i){
dad[i]=i;
range[i]=1;
}
for(;m;--m){
fin>>cd>>x>>y;
if (cd==1){
unite(parent(x),parent(y));
continue;
}
if (parent(x)==parent(y)){
fout<< "DA\n";
} else {
fout<< "NU\n";
}
}
return 0;
}