Pagini recente » Cod sursa (job #2934729) | Cod sursa (job #1469431) | Cod sursa (job #2694845) | Cod sursa (job #31843) | Cod sursa (job #1307307)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,i,tip,v[100010],parenta,parentb,a,b;
int Find(int x) //nu este un find simplu. Acesta si reduce adancimea unei paduri astfel ca uneste toate nodurile prin care trece de radacina
{
if(v[x]<0)
{
return x;
}
else
return v[x]=Find(v[x]);
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;++i)
v[i]=-1; // la inceput fiecare nod este radacina. Radacina se noteaza cu -(numarul de elemente)
for(i=1;i<=m;++i)
{
fin>>tip>>a>>b;
if(tip==1)
{
parenta=Find(a);
parentb=Find(b);
if(v[parenta]>v[parentb])
{
v[parenta]=parentb;
}
else
{
v[parentb]=parenta;
}
}
else
{
parenta=Find(a);
parentb=Find(b);
if(parenta==parentb)
{
fout<<"DA\n";
}
else
{
fout<<"NU\n";
}
}
}
return 0;
}