Pagini recente » Cod sursa (job #365154) | Cod sursa (job #1974213) | Cod sursa (job #2915227) | Cod sursa (job #2089902) | Cod sursa (job #2944999)
#include <iostream>
#include <fstream>
using namespace std;
const int N = 100001;
int radacina[N], rang[N], radacina_X, radacina_Y, n, m,operatie, x, y;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int cautaRadacina(int n) //aflam radacina
{
if(radacina[n] == 0)
return n;
radacina[n] = cautaRadacina(radacina[n]);
return radacina[n];
}
bool operatie2(int x, int y)
{
return(cautaRadacina(x) == cautaRadacina(y));
}
void operatie1(int x, int y)
{
radacina_X = cautaRadacina(x);
radacina_Y = cautaRadacina(y);
if(rang[x] < rang[y])
{
radacina[radacina_X] = radacina_Y; //unim arborele mai mic cu cel mai mare
rang[radacina_Y] += rang[radacina_X];
}
else
{
radacina[radacina_Y] = radacina_X;
rang[radacina_X] += rang[radacina_Y];
}
}
int main()
{
f>>n>>m;
for(int i = 1; i <= n; ++i)
{
radacina[i] = i;
rang[i] = 1;
}
for(int i = 1; i <= m; ++i)
{
f>>operatie>>x>>y;
switch (operatie)
{
case 1:
{
operatie1(x, y);
break;
}
case 2:
{
if(operatie2(x, y))
{
g<<"DA\n";
}
else
{
g<<"NU\n";
}
}
}
}
return 0;
}