Cod sursa(job #1853110)

Utilizator horiacoolNedelcu Horia Alexandru horiacool Data 21 ianuarie 2017 13:59:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,tata[100005];

int drum1(int xp)
{
   int r;
   while( xp != 0 )
   {
       r = xp;
       xp = tata[xp];
   }
   return r;
}

int drum(int xp)
{
   if( tata[xp] == 0 )
     return xp;

   tata[xp] = drum( tata[xp] );

   return tata[xp];
}

int main()
{
    int q,x,y,rx,ry;
    f>>n>>m;
    for(int i=1 ; i <= m ; i++)
    {
        f>>q>>x>>y;

        if( q == 1 )
        {
            ry = drum(y);

            if( tata[x] != 0 )
            tata[ry] = tata[x];
            else
            tata[ry] = x;
        }

        if( q == 2 )
        {
            rx = drum(x);
            ry = drum(y);

            if( rx == ry )
               g<<"DA"<<'\n';
            else
               g<<"NU"<<'\n';
        }
    }

    //for(int i=1 ; i <= n ; i++)
      //  cout<<tata[i]<<' ';

    return 0;
}