Pagini recente » Cod sursa (job #2132787) | Cod sursa (job #3237689) | Cod sursa (job #2552390) | Cod sursa (job #142946) | Cod sursa (job #1233635)
#include <stdio.h>
#define NMAX 100000
using namespace std;
FILE * f= fopen("disjoint.in","r"),* g = fopen("disjoint.out","w");
int RG[NMAX],TT[NMAX];
int search1(int x)
{
int R,y;
for( R=x;TT[R]!=R;R=TT[R]);
for (; TT[x] != x;)
{
y = TT[x];
TT[x] = R;
x = y;
}
return R;
}
int unite (int x, int y)
{
if(RG[x]>RG[y])TT[y]=x;
else TT[x]=y;
if (RG[x] == RG[y]) RG[y]++;
}
int main()
{ int n,m;
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);
if(cod == 2)
{
if(search1(x)==search1(y))fprintf(g,"%s\n","DA");
else fprintf(g,"%s\n","NU");
}
else
{
if (search1(x) == search1(y)) {fprintf(g,"%d ", i);return 0;}
unite(x,y);
}
}
return 0;
}