Pagini recente » Cod sursa (job #2376262) | Cod sursa (job #2445214) | Cod sursa (job #827328) | Cod sursa (job #788266) | Cod sursa (job #1233770)
#include <cstdio>
using namespace std;
int n,m,RG[100005],T[100005];
void cauta(int x,int &rez)
{
int aux=x;
int z;
while(T[x]!=x)x=T[x];
while(T[aux]!=aux){z=T[aux];T[aux]=x;aux=z;}
rez=x;
}
void uneste(int x,int y)
{
int aux;
int x1;cauta(x,x1);
int y1;cauta(y,y1);
if(RG[x1]==RG[y1]){T[y1]=x1;RG[x1]++;}
else {if(x1>y1){aux=x1;x1=y1;y1=aux;}T[x1]=y1;}
}
int main()
{
int i,x1,y1,r,x,y;
FILE *f=fopen("disjoint.in","r");
FILE *g=fopen("disjoint.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++){RG[i]=1;T[i]=i;}
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d %d",&r,&x,&y);
if(r==1)uneste(x,y);
else
if(r==2) {cauta(x,x1);cauta(y,y1);if(x1==y1)fprintf(g,"DA\n"); else fprintf(g,"NU\n");}
}
fclose(f);
fclose(g);
return 0;
}