Pagini recente » Cod sursa (job #227879) | Cod sursa (job #2663087) | Cod sursa (job #1234946) | Cod sursa (job #1571590) | Cod sursa (job #1791834)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MaxN 100005
using namespace std;
FILE *IN,*OUT;
int N,M,Type,X,Y,v[MaxN];
void Unite(int x,int y)
{
int aux;
while(v[y]!=y)
y=v[y];
do
{
aux=v[x];
v[x]=y;
x=aux;
}
while(v[x]!=x);
}
void Check(int x,int y)
{
int aux=x;
while(v[y]!=y)
y=v[y];
while(v[x]!=x)
x=v[x];
if(x==y)
{
fprintf(OUT,"DA\n");
while(v[aux]!=y)
{
x=v[aux];
v[aux]=y;
aux=x;
}
}
else fprintf(OUT,"NU\n");
}
int main()
{
IN=fopen("disjoint.in","r");
OUT=fopen("disjoint.out","w");
fscanf(IN,"%d%d",&N,&M);
for(int i=1;i<=N;i++)
v[i]=i;
for(int i=1;i<=M;i++)
{
fscanf(IN,"%d%d%d",&Type,&X,&Y);
if(Type==1)
Unite(X,Y);
else Check(X,Y);
}
return 0;
}