Pagini recente » Cod sursa (job #2036038) | Cod sursa (job #676960) | Cod sursa (job #1477231) | Cod sursa (job #865866) | Cod sursa (job #2357460)
#include <stdio.h>
using namespace std;
FILE *f,*g;
int Father[100010],Rank[100010];
int N,M;
void Update()
{
while(N)Father[N]=N,--N;
}
void Unific(int A,int B)
{
if(Rank[A]>Rank[B])Father[B]=A;
else Father[A]=B;
if(Rank[A]==Rank[B]) Rank[A]++;
}
int FindFather(int Node)
{
if(Node!=Father[Node])Father[Node]=FindFather(Father[Node]);
return Father[Node];
}
int YesOrNot(int A,int B)
{
if(Father[A]==Father[B])return 1;
return 0;
}
void ReadAndSolve()
{
int i,X,Y,task,rootA,rootB;
fscanf(f,"%d %d",&N,&M);
Update();
for(i=1;i<=M;++i)
{
fscanf(f,"%d %d %d",&task,&X,&Y);
rootA=FindFather(X);rootB=FindFather(Y);
if(task==1)Unific(rootA,rootB);
else
if(YesOrNot(rootA,rootB))fprintf(g,"DA\n");
else fprintf(g,"NU\n");
}
}
int main()
{
f=fopen("disjoint.in","r");g=fopen("disjoint.out","w");
ReadAndSolve();
fclose(f);fclose(g);
return 0;
}