Pagini recente » Cod sursa (job #1129323) | Cod sursa (job #2871930) | Cod sursa (job #2155036) | Cod sursa (job #2863096) | Cod sursa (job #2421712)
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 100005
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int tata[MAX];
int rang[MAX];
//vector<int>
int find_tata(int x)
{
if(x == tata[x]) return x;
else
{
tata[x] = find_tata(tata[x]);
return tata[x];
}
}
void reuniune(int x, int y)
{
if(rang[x] >= rang[y]) //In caz de egalitate se reuneste y la x
{
tata[y] = tata[x];
rang[x] =+ rang[y];
}
else if(rang[x] < rang[y])
{
tata[x] = tata[y];
rang[y] += rang[x];
}
}
int main()
{
int N, M;
f>>N>>M;
for(int i = 1; i <= N; i++) //initializare
{
tata[i] = i;
rang[i] = 1;
}
for(int i = 0; i < M; i++) //queries
{
int x, y, cod;
f>>cod>>x>>y;
if(cod == 2)
{
if(find_tata(x) == find_tata(y)) g<<"DA\n";
else g<<"NU\n";
}
else
{
reuniune(find_tata(x), find_tata(y));
}
}
return 0;
}