Pagini recente » Cod sursa (job #1044771) | Cod sursa (job #158938) | Cod sursa (job #2738183) | Cod sursa (job #1495705) | Cod sursa (job #2235991)
#include<fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int Leg[100005],R[100005],N,M;
int Find(int X){
int K,i;
for(i=X;i!=Leg[i];i=Leg[i]);
while(Leg[X]!=X){
K=Leg[X];
Leg[X]=i;
X=K;
}
return i;
}
int Unire(int X,int Y){
if(R[X]>R[Y])
Leg[Y]=X;
else
Leg[X]=Y;
if(R[X]==R[Y])
R[Y]++;
}
int main(){
fin>>N>>M;
for(int i=1;i<=N;i++){
R[i]=1;
Leg[i]=i;
}
for(int i=1;i<=M;i++){
int X,Y,Z;
fin>>X>>Y>>Z;
if(X==1){
if(Find(Y)!=Find(Z))
Unire(Find(Y),Find(Z));
}
else{
if(Find(Y)==Find(Z))
fout<<"DA\n";
else
fout<<"NU\n";
}
}
}