Cod sursa(job #1392419)
Utilizator | Data | 18 martie 2015 17:28:30 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.3 kb |
#include <fstream>
#include <cstring>
#define DIM 100010
using namespace std;
ifstream fin ("disjoint.in" );
ofstream fout("disjoint.out");
int n, m, i, j, k, ok, minim;
int T[DIM], Q, cod, N, x, y, nod1, nod2;
void SetUp(){
fin >> N >> Q;
memset(T, -1, sizeof(T));
return;
}
int Rad(int x){
while(T[x] > 0)
x = T[x];
return x;
}
void CodeExpert(){
for(k = 1; k <= Q; k ++){
fin >> cod >> x >> y;
switch(cod){
case 1 : {
nod1 = Rad(x);
nod2 = Rad(y);
if(nod1 != nod2){
if(T[nod1] < T[nod2]){
T[nod1] += T[nod2];
T[nod2] = nod1;
}
else{
T[nod2] += T[nod1];
T[nod1] = nod2;
}
}
break;
}
case 2 : {
nod1 = Rad(x);
nod2 = Rad(y);
if(nod1 == nod2)
fout << "DA\n";
if(nod1 != nod2)
fout << "NU\n";
break;
}
}
}
return;
}
int main(){
SetUp();
CodeExpert();
return 0;
}