Pagini recente » Cod sursa (job #1832161) | Cod sursa (job #2564548) | Cod sursa (job #1212260) | Cod sursa (job #1308907) | Cod sursa (job #2951547)
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
//ifstream cin ("input"); ofstream cout ("output");
ifstream cin ("disjoint.in"); ofstream cout ("disjoint.out");
vector<vector<int>> galeti;
vector<int> inCeGaleataSunt;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, m;
cin>>n>>m;
galeti.resize(n+1);
inCeGaleataSunt.resize(n+1);
for (int i=1; i<=n; i++){
galeti[i].push_back(i);
inCeGaleataSunt[i] = i;
}
for (int i=1; i<=m; i++){
int op, x, y;
cin>>op>>x>>y;
if (op == 1){ // adaug o galeata la alta
// x este in galeata inCeGaleataSunt[x]
// y este in galeata inCeGaleataSunt[y]
// cum le combin? care galeata e turnata in care? -> torn mai mic in mai mare
int gX = inCeGaleataSunt[x], gY = inCeGaleataSunt[y];
if (galeti[gX].size() > galeti[gY].size()){
// torn y in x
for (auto &elem: galeti[gY]){
galeti[gX].push_back(elem); // torn in galeata
inCeGaleataSunt[elem] = gX; // schimb indicele galetii in care sunt
}
galeti[gY].clear(); // nu mai am nimic in galeata pentru ca le-am turnat
}
else{
// torn x in y
for (auto &elem: galeti[gX]){
galeti[gY].push_back(elem); // torn in galeata
inCeGaleataSunt[elem] = gY; // schimb indicele galetii in care sunt
}
galeti[gX].clear(); // nu mai am nimic in galeata pentru ca le-am turnat
}
}
else{
int gX = inCeGaleataSunt[x], gY = inCeGaleataSunt[y];
if (gX == gY){
cout<<"DA"<<'\n';
}
else{
cout<<"NU"<<'\n';
}
}
}
return 0;
}