Pagini recente » Cod sursa (job #1338609) | Cod sursa (job #2097710) | Cod sursa (job #405885) | Cod sursa (job #721727) | Cod sursa (job #2943495)
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, m;
vector<pair<int,int>> multimi;
int radacina(int x){
int aux = x;
while(multimi[aux].first != 0) aux = multimi[aux].first;
if(multimi[x].first != 0){
multimi[x].first = aux;
x = multimi[x].first;
}
return x;
}
void uniune(int x, int y){
int radx = radacina(x), rady = radacina(y);
if(multimi[radx].second > multimi[rady].second){
multimi[radx].second += multimi[rady].second;
multimi[rady].first = radx;
}
else{
multimi[rady].second += multimi[radx].second;
multimi[radx].first = rady;
}
}
int main() {
fin>>n>>m;
multimi.resize(n+1, {0,1});
for(int i = 1; i <= m; i++){
int op,x,y;
fin>>op>>x>>y;
if(op == 1){
uniune(x,y);
}
if(op == 2){
if(radacina(x) == radacina(y)) fout<<"DA\n";
else fout<<"NU\n";
}
}
for(int i = 0; i < n; i++){
cout<<multimi[i].first<<" ";
}
return 0;
}