Pagini recente » Istoria paginii home | Cod sursa (job #838026) | Cod sursa (job #125588) | Cod sursa (job #1962246) | Cod sursa (job #2439196)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int dim = 100005;
int r[dim],n,m,adancime[dim],op;
int Find(int x)
{
if (x == r[x])
{
return x;
}
r[x] = Find(r[x]);
return r[x];
}
int Union(int x,int y)
{
int rx,ry;
rx = Find(x);
ry = Find(y);
if (adancime[rx] > adancime[ry])
{
r[ry] = r[rx];
}
else r[rx] = r[ry];
if (adancime[rx] == adancime[ry])
{
r[ry] = r[rx];
adancime[rx]++;
}
}
int main()
{
int x,y,rx,ry;
in >> n >> m;
for (int i=1; i<=n; i++)
{
r[i] = i;
adancime[i] = 1;
}
for (int i=1; i<=m; i++)
{
in >> op >> x >> y;
if (op == 1)
{
Union(x,y);
}
else
{
rx = Find(x);
ry = Find(y);
if (rx == ry)
{
out << "DA\n";
}
else out << "NU\n";
}
}
return 0;
}