Pagini recente » Cod sursa (job #2756718) | Cod sursa (job #1467567) | Cod sursa (job #1414872) | Cod sursa (job #2428580) | Cod sursa (job #3174590)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
#define MAX_N 100005
int parent[MAX_N];
int sizeO[MAX_N];
int find_rep(int node)
{
if(parent[node] == 0)
return node;
return parent[node] = find_rep(parent[node]);
}
void unite(int x, int y)
{
int head1 = find_rep(x);
int head2 = find_rep(y);
if(head1 == head2)
return;
if(sizeO[head1] < sizeO[head2])
{
swap(head1, head2);
} else if(sizeO[head1] == sizeO[head2])
{
sizeO[head1]++;
}
parent[head2] = head1;
}
int main()
{
int n, m, x, y, c;
in >> n >> m;
for(int i = 1; i <= n; ++i) sizeO[i] = 1;
for(int i = 0; i < m; ++i)
{
in >> c >> x >> y;
if(c == 1)
{
unite(x, y);
} else
{
if(find_rep(x) == find_rep(y))
{
out << "DA" << '\n';
} else
{
out << "NU" << '\n';
}
}
}
return 0;
}