Pagini recente » Cod sursa (job #600510) | Cod sursa (job #2391165) | Cod sursa (job #2646954) | Cod sursa (job #939322) | Cod sursa (job #2704404)
#include <iostream>
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int a, b, caz, x, y;
int Tata[Nmax], Dimensiune[Nmax];
inline int Find(int x)
{
if(x != Tata[x])
Tata[x] = Find(Tata[x]);
return Tata[x];
}
void Unire(int x, int y)
{
x = Find(x);
y = Find(y);
if(Dimensiune[x] < Dimensiune[y])
{
Dimensiune[y] += Dimensiune[x];
Tata[x] = y;
}
else
{
Dimensiune[x] += Dimensiune[y];
Tata[y] = x;
}
}
int main()
{
fin >> a >> b;
for(int i = 1; i <= b; ++ i)
{
Tata[i] = i;
Dimensiune[i] = 1;
}
for(int i = 1; i <= b; ++ i)
{
fin >> caz >> x >> y;
if(caz == 1)
{
int tata_x = Find(x);
int tata_y = Find(y);
if(tata_x != tata_y)
{
Unire(x, y);
}
}
else
{
int tata_x = Find(x);
int tata_y = Find(y);
if(tata_x == tata_y)
fout << "DA" << "\n";
else
fout << "NU" << "\n";
}
}
return 0;
}