Pagini recente » Cod sursa (job #2397259) | Cod sursa (job #285252) | Cod sursa (job #2048794) | Cod sursa (job #2831550) | Cod sursa (job #2335502)
#include <iostream>
#include <fstream>
int sef[100000],temp[100000];
using namespace std;
void calcDaBoss(int n){
int i;
for(i=0;i<n;i++)
sef[i]=i;
}
void unionMul(int x,int y){
while(sef[x]!=x)
x=sef[x];
while(sef[y]!=y)
y=sef[y];
sef[x]=sef[y];
}
int findus(int x,int y){
int i=0,j;
while(sef[x]!=x){
temp[i]=x;
x=sef[x];
i++;
}
for(j=0;j<i;j++){
sef[temp[j]]=x;
}
i=0;
while(sef[y]!=y){
temp[i]=y;
y=sef[y];
i++;
}
for(j=0;j<i;j++){
sef[temp[j]]=y;
}
if(sef[x]==sef[y])
return 1;
else
return 0;
}
int main()
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,code,x,y,val,i;
fin>>n>>m;
calcDaBoss(n);
for(i=0;i<m;i++){
fin>>code>>x>>y;
if(code==1){
unionMul(x,y);
}
else{
val=findus(x,y);
if(val==0)
fout<<"NU"<<endl;
else
fout<<"DA"<<endl;
}
}
fin.close();
fout.close();
return 0;
}