Pagini recente » Cod sursa (job #1957535) | Cod sursa (job #1223604) | Cod sursa (job #730042) | Cod sursa (job #795214) | Cod sursa (job #1821048)
#include <iostream>
#include <fstream>
#include <vector>
#define MAX_LENGTH 100001
using namespace std;
vector<int> arbore;
vector<int> rang;
int numarMultimi;
int numarInterogari;
void Init()
{
for( int index = 0; index < numarMultimi; ++index )
{
arbore.push_back(index);
rang.push_back(1);
}
}
int Cautare(int nod)
{
int radacina;
int nodAux;
for( radacina = nod; arbore[radacina] != radacina; radacina = arbore[radacina] );
for( ; arbore[nod] != nod ; nodAux = arbore[nod], arbore[nod] = radacina, nod = nodAux );
return radacina;
}
void UnesteMultimile(int nod1, int nod2)
{
rang[nod1] > rang[nod2] ? arbore[nod2] = nod1 : arbore[nod1] = nod2;
if( rang[nod1] == rang[nod2] )
++rang[nod2];
}
int main()
{
ifstream inputStream("disjoint.in");
ofstream outputStream("disjoint.out");
inputStream>> numarMultimi>> numarInterogari;
Init();
for( int interogare = 1; interogare <= numarInterogari; ++interogare )
{
int tipInterogare;
int nod1;
int nod2;
inputStream>> tipInterogare>> nod1>> nod2;
if( tipInterogare == 2 )
outputStream<< ( Cautare(nod1 - 1) == Cautare(nod2 - 1) ? "DA\n" : "NU\n" );
else
UnesteMultimile(Cautare(nod1 - 1), Cautare(nod2 - 1));
}
return 0;
}