Pagini recente » Cod sursa (job #1166250) | Cod sursa (job #937473) | Cod sursa (job #2907385) | Cod sursa (job #2948383)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
long tata[100001], ct[100001];
int radacina(int a) //afalm unde este radacina nodului
{
while (tata[a] != 0)
a = tata[a];
return a;
}
void reuniune(int a, int b) //facem reuniunea multimilor
{
int ta = radacina(a);
int tb = radacina(b);
if (ct[ta] > ct[tb])
tata[tb] = ta;
else {
tata[ta] = tb;
if (ct[ta] == ct[tb])
ct[tb] = ct[tb] + 1;
}
}
int main()
{
long N, M, cod, x, y;
f>>N>>M;
for (int i = 1; i <= N; i++) //initializare
tata[i] = ct[i] = 0;
while(f>>cod>>x>>y)
{
if(cod==1)
{
if(radacina(x)!= radacina(y))
reuniune(x,y);
}
else if(cod==2)
{
if(radacina(x)== radacina(y)) // x si y se afla in aceeasi multime daca au aceeasi radacina
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
}
return 0;
}