Pagini recente » Cod sursa (job #3271687) | Cod sursa (job #329282) | Cod sursa (job #2144470) | Cod sursa (job #373512) | Cod sursa (job #715351)
Cod sursa(job #715351)
#include<cstdio>
using namespace std;
#define NMAX 100010
FILE *f=fopen("disjoint.in","r");
FILE *g=fopen("disjoint.out","w");
long n,m,T[NMAX],op,x,y,R[NMAX];
long multime (long i)
{
long root=i,aux;
while (T[root]!=root)
root=T[root];
while (T[i]!=i)
{ aux=T[i];
T[i]=root;
i=aux;
}
return root;
}
void reuneste (long i, long j)
{ i=multime(i);
j=multime(j);
if (i==j) return;
if (R[i]<R[j])
T[i]=T[j];
else
T[j]=T[i];
if ( R[i]==R[j] )
R[i]++;
}
int main()
{
fscanf(f,"%ld%ld",&n,&m);
for (long i=1;i<=n;i++)
T[i]=i;
for (long i=1;i<=m;i++)
{ fscanf(f,"%ld%ld%ld",&op,&x,&y);
if (op==1)
reuneste(x,y);
if (op==2)
if (multime(x)==multime(y))
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
return 0;}