Pagini recente » Cod sursa (job #39534) | Cod sursa (job #1637670) | Cod sursa (job #151761) | Cod sursa (job #3224176) | Cod sursa (job #2946571)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
#define MAX 100001
int radacina[MAX],rang[MAX];
int c_radacina(int x)
{
if(radacina[x] == 0)return x;
return c_radacina(radacina[x]);
}
void operatie_1(int x,int y)
{
int radacina_x = c_radacina(x);
int radacina_y = c_radacina(y);
// UNIM ARBORELE CU RANG MAI MIC CU CEL CU RANG MAI MARE
// ACTUALIZAM RADACINA ARBORELUI MAI MIC
// ACTUALIZAM RANGUL ARBORELUI MAI MARE
if(rang[x] < rang[y])
{
radacina[radacina_x] = radacina_y;
rang[radacina_y] += rang[radacina_x];
}
else
{
radacina[radacina_y] = radacina_x;
rang[radacina_x] += rang[radacina_y];
}
}
bool operatie_2(int x,int y)
{
return(c_radacina(x) == c_radacina(y));
}
int main()
{
int N,M;
// CITIRE
f>>N>>M;
// FORMAM MULTIMILE INITIALE
// FIECARE NOD ARE RANGUL 1, FIIND RADACINA
for(int i = 1; i <= N; i++)
rang[i] = 1;
int operatie,x,y;
for(int i = 0; i < M; i++)
{
f>>operatie>>x>>y;
switch(operatie)
{
case 1: {operatie_1(x,y); break;}
case 2: if(operatie_2(x,y))g<<"DA"<<endl;
else g<<"NU"<<endl;
}
}
f.close();
g.close();
return 0;
}