Pagini recente » Cod sursa (job #3186924) | Cod sursa (job #494921) | Cod sursa (job #50027) | Cod sursa (job #2688817) | Cod sursa (job #699261)
Cod sursa(job #699261)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int sir[100001],rang[100001];
void combina(int x , int y){
if(rang[sir[x]]>rang[sir[y]])
sir[y]=sir[x];
else if(rang[sir[x]]>rang[sir[y]])
sir[x]=sir[y];
else{
rang[sir[x]]++;
sir[sir[y]]=sir[x];
}
}
void cauta(int x , int y){
int i = x , j=y;
while(sir[i]!=i)
i=sir[i];
while(sir[j]!=j)
j=sir[j];
if(i==j){
fo<<"DA\n";
i=x;
while(sir[i]!=i){
int aux=i;
i=sir[i];
sir[aux]=j;
}
i=y;
while(sir[i]!=i){
int aux=i;
i=sir[i];
sir[aux]=j;
}
}else fo<<"NU\n";
}
int main(){
int n , m;
fi>>n>>m;
for(int i=1;i<=n;i++)
sir[i]=i;
for(int i=0;i<m;i++){
int tip , x , y;
fi>>tip>>x>>y;
switch(tip){
case 1:
combina(x,y);
continue;
case 2:
cauta(x,y);
}
}
}