Pagini recente » Cod sursa (job #1958718) | Cod sursa (job #1264554) | Cod sursa (job #845858) | Cod sursa (job #629024) | Cod sursa (job #1196798)
#include <fstream>
#define dim 100005
int P[dim],rank[dim],n,k,m,t,x,y,i;
void CREATE_SETS(int n){
for(i=1;i<=n;i++){
rank[i]=1;
P[i]=i;
}
}
int FIND_SET(int x){
if(x!=P[x]) P[x]=FIND_SET(P[x]);
return P[x];
}
void MERGE_SETS(int x,int y){
int Px=FIND_SET(x);
int Py=FIND_SET(y);
if(rank[Px]>rank[Py])
P[Py]=x;
else P[Px]=y;
if(rank[Px]==rank[Py]) rank[Py]++;
}
int main(){
std::ifstream f("disjoint.in");
std::ofstream g("disjoint.out");
f >> n >> m;
CREATE_SETS(n);
for(k=1;k<=m;k++){
f >> t >> x >> y;
if(t==1){
if(FIND_SET(x)!=FIND_SET(y)) MERGE_SETS(x,y);
}
else{
if(FIND_SET(x)==FIND_SET(y)) g << "DA\n";
else g << "NU\n";
}
}
}