Pagini recente » Cod sursa (job #720569) | Cod sursa (job #890987) | Cod sursa (job #282287) | Cod sursa (job #773258) | Cod sursa (job #1196795)
#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){
int i=x,aux;
for(;i!=P[i];i=P[i]);
while(P[x]!=x){
aux = P[x];
P[x]=i;
x=aux;
}
return i;
}
void MERGE_SETS(int x,int y){
if(rank[x]>rank[y])
P[y]=x;
else P[x]=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){
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";
}
}
}