Pagini recente » Cod sursa (job #1110378) | Cod sursa (job #2566782) | Cei mai harnici utilizatori info-arena | Cod sursa (job #775513) | Cod sursa (job #584451)
Cod sursa(job #584451)
#include<stdio.h>
#define dim 100005
using namespace std;
int n,m,i,x,y,t,T1,T2,a,b,tata[dim],nivel[dim];
int main()
{
FILE *f=fopen("disjoint.in","r"), *g=fopen("disjoint.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
{tata[i]=i;
nivel[i]=1;}
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&t,&x,&y);
if(t==1)
{
a=tata[x]; b=x;
while(a!=b)
{
b=a;
a=tata[b];
}
T1=a;
//afla tatal lui y
a=tata[y]; b=y;
while(a!=b)
{
b=a;
a=tata[b];
}
T2=a;
if(nivel[T1] < nivel[T2])
tata[T1]=T2;
if(nivel[T2] < nivel[T1])
tata[T2]=T1;
else if(nivel[T2] == nivel[T1]) {tata[T2]=T1; nivel[T1]++; }
}
else if(t==2)
{
//afla tatal lui x
a=tata[x]; b=x;
while(a!=b)
{
b=a;
a=tata[b];
}
T1=a;
//afla tatal lui y
a=tata[y]; b=y;
while(a!=b)
{
b=a;
a=tata[b];
}
T2=a;
if(T1==T2) fprintf(g,"DA\n");
else fprintf(g,"NU\n");
}
}
fclose(f);
fclose(g);
return 0;
}