Pagini recente » Cod sursa (job #1705911) | Cod sursa (job #2562075) | Cod sursa (job #2521435) | Cod sursa (job #3143435) | Cod sursa (job #1236230)
#include <stdio.h>
#define NMAX 100001
using namespace std;
FILE * f= fopen("disjoint.in","r"),* g = fopen("disjoint.out","w");
int x1,y1;
int RG[NMAX],TT[NMAX];
int search1(int x)
{
int r=x,aux;
while(r!=TT[r])r=TT[r];
while(x!=TT[x]){aux=TT[x];TT[x]=r;x=aux;}
return r;
}
void unite (int x, int y)
{
if(RG[x]>RG[y])TT[y1]=x1;
else TT[x1]=y1;
if (RG[x] == RG[y]) {RG[y]++;}
}
int n,m;
int main()
{
fscanf(f,"%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
TT[i]=i;
RG[i]=1;
}
int cod,x,y;
for(int i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&cod,&x,&y);
x1=search1(x);
y1=search1(y);
if(cod == 2)
{
if(x1==y1)fprintf(g,"%s\n","DA");
else fprintf(g,"%s\n","NU");
}
else
{
unite(x,y);
}
}
fclose(f);
fclose(g);
return 0;
}