Cod sursa(job #661777)

Utilizator Ifm-6Ilie Madalina Ifm-6 Data 15 ianuarie 2012 11:09:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <stdio.h>

int tata[100100],v[100100],n,m;

int caut(int &a)
{
    while (a!=tata[a])
        a=tata[a];
        return a;
        }
void re(int x, int y)
{ if (v[x]<v[y])  tata[x]=y;
    else   tata[y]=x;
    if (v[x]==v[y]) v[x]++;
}

int main()
{ int i,x,y,c;
FILE* f=fopen("disjoint.in","r");
FILE* g=fopen("disjoint.out","w+");
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=n;i++)
   tata[i]=i;
for (i=1;i<=m;i++)
   {fscanf(f,"%d %d %d",&c,&x,&y);
     if (c==1) re(caut(x),caut(y));
     else 
        if (caut(x)==caut(y)) fprintf(g,"DA\n");
        else fprintf(g,"NU\n");}
 fclose(f);
 fclose(g);       
return 0;
}