Pagini recente » Cod sursa (job #1866386) | Cod sursa (job #1321929) | Cod sursa (job #745441) | Cod sursa (job #2428617) | Cod sursa (job #2740080)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
const int NMAX = 100005;
int tata[NMAX], rang[NMAX];
int N, M;
void init()
{
for(int i = 1; i <= NMAX; i++)
tata[i] = i;
}
int get_tata(int nod)
{
while(tata[nod] != nod)
nod = tata[nod];
return nod;
}
void afisare(int x, int y)
{
if(get_tata(x) == get_tata(y))
fout << "DA" << '\n';
else
fout << "NU" << '\n';
}
void uniune(int x, int y)
{
int tata_x = get_tata(x);
int tata_y = get_tata(y);
if(rang[tata_x] > rang[tata_y])
{
tata[tata_y] = tata_x;
rang[tata_x]++;
}
else
{
tata[tata_x] = tata_y;
rang[tata_y]++;
}
}
void paduri_multimi_disjuncte()
{
fin >> N >> M; int x, y, op;
for(int i = 0; i < M; i++)
{
fin >> op >> x >> y;
if(op == 1)
uniune(x, y);
else
afisare(x, y);
}
}
int main()
{
init();
paduri_multimi_disjuncte();
return 0;
}