Pagini recente » Cod sursa (job #2336567) | Cod sursa (job #2270972) | Cod sursa (job #2496508) | Cod sursa (job #1073400) | Cod sursa (job #2945219)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("disjoint.in");
ofstream cout ("disjoint.out");
int n, m;
vector<pair<int,int>> multimi;
int radacina(int x){
int x2 = x;
while(multimi[x2].first != 0) {x2 = multimi[x2].first;}
if(multimi[x].first != 0){
multimi[x].first = x2;
}
return x2;
}
void uniune(int x, int y){
int radacina1 = radacina(x), radacina2 = radacina(y);
if(multimi[radacina1].second > multimi[radacina2].second){
multimi[radacina1].second =multimi[radacina1].second+ multimi[radacina2].second;
multimi[radacina2].first = radacina1;
}
else{
multimi[radacina2].second =multimi[radacina2].second + multimi[radacina1].second;
multimi[radacina1].first = radacina2;
}
}
int main() {
cin>>n>>m;
multimi.resize(n+1, {0,1});
for(int i = 0; i < m; i++){
int cod,x,y;
cin>>cod>>x>>y;
if(cod== 1){
uniune(x,y);
}
else{
if(radacina(x) == radacina(y)) cout<<"DA"<<"\n";
else cout<<"NU"<<"\n";
}
}
}