Pagini recente » Monitorul de evaluare | Cod sursa (job #1194944) | Rating Vlad Temian (vtemian) | Istoria paginii runda/juniori_2011_1 | Cod sursa (job #1850828)
#include <iostream>
#include <fstream>
#include <stdio.h>
#define dim 100100
using namespace std;
int tata[dim],h[dim];
//returneaza radacina arborelui din care face parte x si face si compresarea drumurilor
int rad_arbore(int x)
{
int i, rad, aux;
rad = x;
while(tata[rad] != rad){
rad = tata[rad];
}
while(tata[x] != x){
aux = x;
tata[x] = rad;
x = tata[aux];
}
return rad;
}
void reuniune(int x, int y)
{
if(h[x] > h[y]){
tata[y] = x;
}else{
tata[x] = y;
}
if(h[x] == h[y]) h[y]++;
}
int main()
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int cod, n, m, i ,x , y, j;
fin>>n>>m;
for(i = 1 ; i <= n ; i++){
tata[i] = i;
h[i] = 1;
}
for(i = 1 ; i <= m ; i++){
fin>>cod>>x>>y;
if(cod == 1){
if (rad_arbore(x) == rad_arbore(y)) {fprintf(stderr,"%d ", i);return 0;}
reuniune(rad_arbore(x), rad_arbore(y));
}else{
if(rad_arbore(x) == rad_arbore(y)){
fout<<"DA\n";
}
else{
fout<<"NU\n";
}
}
}
fin.close();
fout.close();
return 0;
}