Cod sursa(job #1922934)

Utilizator alexoloieriAlexandru Oloieri alexoloieri Data 10 martie 2017 19:41:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#define LMAX 100000

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n;
int h[LMAX];
int tata[LMAX];

void citire();
void Union(int x, int y);
int Find(int x);

int main()
{
citire();
fin.close();
fout.close();
return 0;
}

void citire()
    {
     int i;
     int a, b, cerinta;
     int x, y;
     int m;
     fin>>n>>m;
     for (i=1;i<=m;i++)
         {
          fin>>cerinta>>a>>b;
          x=Find(a);
          y=Find(b);
          if (cerinta==1)
             {
              Union(x, y);
             }
             else
             {
              if (x==y)
                  fout<<"DA\n";
                  else fout<<"NU\n";
             }
         }
    }

void Union(int x, int y)
    {
     if (h[x]>h[y])
         tata[y]=x;
         else
         if (h[x]<h[y])
             tata[x]=y;
             else
             {
              tata[y]=x;
              h[x]++;
             }
    }

int Find(int x)
    {
     int rad, aux;
     rad=x;
     while (tata[x])
            x=tata[x];
     if (x!=rad)
        while (tata[rad]!=x)
              {
               aux=tata[rad];
               tata[rad]=x;
               rad=aux;
              }
     return x;
    }