Pagini recente » Cod sursa (job #1565858) | Cod sursa (job #1110065) | Cod sursa (job #38739) | Cod sursa (job #1683267) | Cod sursa (job #1196786)
#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(P[x]!=x) P[x]=FIND_SET(P[x]);
return P[x];
}
void MERGE_SETS(int x,int y){
if(rank[x]>rank[y])
P[y]=x;
else P[x]=P[y];
if(rank[x]==rank[y]) rank[y]++;
}
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){
MERGE_SETS(x,y);
}
else{
if(FIND_SET(x)==FIND_SET(y)) g << "DA\n";
else g << "NU\n";
}
}
}