Pagini recente » Cod sursa (job #308620) | Cod sursa (job #1509770) | Cod sursa (job #1584023) | Cod sursa (job #2080884) | Cod sursa (job #2757882)
#include <fstream>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int n, m;
int Tata[100005];
int Rank[100005];
int Radacina (int x)
{
if (Tata[x] == 0)
return x;
else
{
int k = Radacina(Tata[x]);
Tata[x] = k;
return k;
}
}
void Unire (int x, int y)
{
int rx = Radacina(x); int ry = Radacina(y);
if (Rank[rx] > Rank[ry])
Tata[ry] = rx;
else
{
Tata[rx] = ry;
if (rx == ry) Rank[ry] ++;
}
}
int main()
{
f >> n >> m;
for (int i=1; i<=n; i++)
Tata[i] = 0, Rank[i] = 1;
for (int i=1; i<=m; i++)
{
int t, x, y;
f >> t >> x >> y;
if (t == 1) Unire(x, y);
else
{
if (Radacina(x) == Radacina(y))
g << "DA" << "\n";
else g << "NU" << "\n";
}
}
return 0;
}