Pagini recente » Cod sursa (job #901446) | Cod sursa (job #2227834) | Cod sursa (job #2707670) | Cod sursa (job #805106) | Cod sursa (job #949167)
Cod sursa(job #949167)
#include <cstdlib>
#include <fstream>
using namespace std;
const int NMAX = 100011;
int r[NMAX], f[NMAX];
int find(int x)
{
int y, z;
for(y = f[x]; y != f[y]; y = f[y]);
while(x != f[x])
{
z = f[x];
f[x] = y;
x = z;
}
return y;
}
inline void Union(int x, int y)
{
int fx = find(x), fy = find(y);
if(fx == fy) return;
if(r[fx] < r[fy]) f[fx] = fy;
else if(r[fy] > r[fx]) f[fy] = fx;
else {
f[fx] = fy;
++r[fy];
}
}
int main()
{
int N, M, x, y, op, i;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
in >> N >> M;
for(i = 1; i <= N; ++i)
{
f[i] = i;
r[i] = 1;
}
while(M--)
{
in >> op >> x >> y;
if(2 == op) out << (find(x) == find(y) ? "DA" : "NU") << '\n';
else Union(x, y);
}
return EXIT_SUCCESS;
}