Pagini recente » Cod sursa (job #2554878) | Cod sursa (job #431859) | Cod sursa (job #3269565) | Cod sursa (job #2266193) | Cod sursa (job #2864795)
#include <iostream>
#include <fstream>
#define NMAX 100020
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int parinte[1000], marime[1000];
int n, m;
int sef(int x)
{
int radacina=x, y;
while(radacina!=parinte[radacina])
radacina=parinte[radacina];
//compresie
while(x!=radacina)
{
y = parinte[x];
parinte[x] = radacina;
x = y;
}
return radacina;
}
void unite(int x, int y)
{
x=sef(x);
y=sef(y);
parinte[x]=y;
}
int main()
{
f>>n>>m;
int i, x, y, p;
//initial fiecare nod pointeaza catre el insusi iar rangul fiecarui arbore este 1
for (i=1; i<=n; i++)
{
parinte[i]=i;
marime[i]=1;
}
for (i=1; i<=m; i++)
{
f>>p>>x>>y;
if (p==2)
{
//verific daca radacina arborilor in care se afla x respectiv y este egala
if (sef(x) == sef(y))
g<<"DA\n";
else
g<<"NU\n";
}
if(p==1) //unesc radacinile arborilor corespunzatori multimilor nodurilor x respectiv y
{
unite(x, y);
}
}
return 0;
}