Pagini recente » Cod sursa (job #2912548) | Cod sursa (job #1267300) | Cod sursa (job #1522782) | Cod sursa (job #476811) | Cod sursa (job #2945338)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout ("disjoint.out");
vector<int> t;
/// functia de cautare si de simplificat vectorul de tati prin a face tatii la toate numerele intre x si radacina fiu direct a radacinei (x este inclus)
int find(int x){
int rad = x;
while(rad != t[rad]){
rad = t[rad];
}
while(x != rad){
int x1 = t[x];
t[x] = rad;
x = x1;
}
return rad;
}
/// operatia 1 cu semnificatia din problema (unirea)
void op1(int x, int y){
int x1 = find(x);
int y1 = find(y);
t[y1] = x1;
}
/// operatia 2 cu semnificatia din problema (verificarea)
void op2(int x, int y){
if (find(x) == find(y)){
fout<<"DA"<<endl;
}
else
fout<<"NU"<<endl;
}
int main() {
int n, m, cod, x, y;
fin>>n>>m;
t.resize(n + 1);
for (int i = 1; i < n + 1; ++i) {
t[i] = i;
}
for (int i = 0; i < m; ++i) {
fin>>cod>>x>>y;
if (cod == 1) {
op1(x,y);
}
else {
op2(x,y);
}
}
return 0;
}