Pagini recente » Cod sursa (job #1776866) | Cod sursa (job #1590414) | Cod sursa (job #136492) | Cod sursa (job #1171591) | Cod sursa (job #1210100)
#include<fstream>
using namespace std;
#define MAXN 100005
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int TT[MAXN],RG[MAXN],N,M;
int Find(int x){
int R,y;
for(R=x;TT[R]!=R;R=TT[R]);
//reconstrutia drumului
while(TT[x]!=x){
y=TT[x];
TT[x]=R;
x=y;
}
return R;
}
void Union(int x,int y){
if (RG[x]>RG[y])
TT[y]=x;
else TT[x]=y;
if(RG[x]==RG[y]) RG[y]++;
}
int main() {
int i,x,y,q;
cin>>N>>M;
for(i=1;i<=N;i++){
TT[i]=i;
RG[i]=1;
}
for(i=1;i<=M;i++){
cin>>q>>x>>y;
if(q==1) Union(Find(x),Find(y));
else
if (Find(x)==Find(y)) cout<<"DA"<<"\n";
else cout<<"NU"<<"\n";
}
return 0;
}