Pagini recente » Cod sursa (job #1086294) | Cod sursa (job #72537) | Cod sursa (job #537548) | Cod sursa (job #1506061) | Cod sursa (job #840915)
Cod sursa(job #840915)
#include <fstream>
#include <cstdio>
#include <cstdlib>
#define MAX_SIZE 100100
int rang[MAX_SIZE];
int tree[MAX_SIZE];
int N , M;
using namespace std;
int find_root(int x)
{
int radacina = x;
int y = x;
while ( radacina != tree[radacina])
{
radacina = tree[radacina];
}
while ( x != tree[x])
{
y = tree[x];
tree[x] = radacina;
x = y;
}
return radacina;
}
void unite_trees(int x , int y)
{
if ( rang[x] > rang[y])
{
tree[y] = x;
}
else
{
tree[x] = y;
}
if (rang[x] == rang[y])
{
rang[y]++;
}
}
int main()
{
ifstream input("disjoint.in");
ofstream output("disjoint.out");
input >> N >> M;
for (int i =1;i<=N;i++)
{
rang[i] = 1;
tree[i] = i;
}
for (int i =1;i<=M;i++)
{
int op , x , y;
input >> op >> x >> y;
if (op == 1)
{
unite_trees(x , y);
}
else
{
if (find_root(x) == find_root(y)) output << "DA\n";
else output << "NU\n";
}
}
input.close();
output.close();
return 0;
}