Pagini recente » Cod sursa (job #1853517) | Cod sursa (job #2548066) | Cod sursa (job #1069659) | Cod sursa (job #938430) | Cod sursa (job #2470231)
#include <fstream>
#define N_MAX 100000
using namespace std;
size_t id[N_MAX + 1];
size_t sz[N_MAX + 1];
size_t find_root(size_t x)
{
size_t root = x;
while(root != id[root]) root = id[root];
size_t next;
while(x != root)
{
next = id[x];
id[x] = root;
x = next;
}
return root;
}
void union_sets(size_t x, size_t y)
{
size_t rootX = find_root(x);
size_t rootY = find_root(y);
if(rootX == rootY) return;
if(sz[rootX] > sz[rootY])
{
id[rootY] = rootX;
sz[rootX] += sz[rootY];
}
else {
id[rootX] = rootY;
sz[rootY] += sz[rootX];
}
return;
}
void disjoint_init()
{
for(size_t i = 0; i <= N_MAX; ++i)
{
sz[i] = 1;
id[i] = i;
}
}
int main()
{
disjoint_init();
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
size_t N, M;
fin >> N >> M;
size_t op, x, y;
for(size_t i = 1; i <= M; ++i)
{
fin >> op >> x >> y;
if(op == 1) union_sets(x, y);
else if(find_root(x) == find_root(y)) fout << "DA\n";
else fout << "NU\n";
}
}