Cod sursa(job #2304048)
| Utilizator | Data | 17 decembrie 2018 14:10:53 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.89 kb |
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, i, j, x, y, op, t[100010], rx, ry;
int radacina(int nod){
while(t[nod]>0){
nod=t[nod];
}
return nod;
}
int main(){
fin>>n>>m;
for(i=1; i<=n; i++){
t[i]=-1;
}
for(i=1; i<=m; i++){
fin>>op>>x>>y;
if(op==1){
rx=radacina(x);
ry=radacina(y);
if(rx!=ry){
if(t[rx]<t[ry]){
t[rx]+=t[ry];
t[ry]=rx;
}
else{
t[ry]+=t[rx];
t[rx]=ry;
}
}
}else{
if(radacina(x)==radacina(y)){
fout<<"DA"<<"\n";
}else{
fout<<"NU"<<"\n";
}
}
}
}
