Pagini recente » Cod sursa (job #1246256) | Borderou de evaluare (job #1794639) | Borderou de evaluare (job #1794963) | Cod sursa (job #1879901)
#include <fstream>
#define NMAX 100020
#define FOR(i,a,b) for(int i = a; i<=b; i++)
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int ta[NMAX],ra[NMAX];
int N,M;
int Find(int x)
{
int r,y;
for(r = x; ta[r]!=r; r = ta[r]);//urc pana gasesc un nod care pointeaza la el
for(;ta[x]!=x;)//compresie
{
y = ta[x];
ta[x] = r;
x = y;
}
return r;
}
void Reuniune(int x, int y)
{
if(ra[x] > ra[y])
ta[y] = x;
else
ta[x] = y;
if(ra[x] == ra[y]) ra[y]++;
}
int main()
{
fin>>N>>M;
FOR(i,1,N)
{
ta[i] = i;
ra[i] = 1;
}
int x,y,cod;
FOR(i,1,M)
{
fin>>cod>>x>>y;
if(cod == 1)
Reuniune(Find(x),Find(y));
else
{
if(Find(x) == Find(y))
fout<<"DA"<<'\n';
else
fout<<"NU"<<'\n';
}
}
return 0;
}