Pagini recente » Cod sursa (job #1284720) | Cod sursa (job #2052873) | Cod sursa (job #2146913) | Cod sursa (job #2459516) | Cod sursa (job #1210008)
#include<fstream>
using namespace std;
#define MAXN 100005
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int parent[MAXN],N,M,size[MAXN];
int Find(int x)
{ int i,rx,ret[MAXN],k=0;
rx=x;
while(parent[x]>0){
ret[++k]=x;
x=parent[x];
}
for(i=1;i<=k;i++)
parent[ret[i]]=x;
return x;
}
void Union(int x, int y)
{
int rx=Find(x),ry=Find(y);
if(rx!=ry){
if(size[rx]>size[ry]){
parent[ry]=rx;
size[rx]=size[rx]+size[ry];
}
else {
parent[rx]=ry;
size[ry]=size[ry]+size[rx];
}
}
}//end Union
int main() {
int i,x,y,q;
for(i=1;i<=N;i++)
size[i]=1;
cin>>N>>M;
for(i=1;i<=M;i++){
cin>>q>>x>>y;
if(q==1) Union(x,y);
else if(Find(x)==Find(y)) cout<<"DA"<<"\n";
else cout<<"NU"<<"\n";
}//end for
return 0;
}