Pagini recente » Borderou de evaluare (job #1511509) | Borderou de evaluare (job #430445) | Borderou de evaluare (job #881418) | Borderou de evaluare (job #1209587) | Cod sursa (job #1967886)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
int const nmax = 100000;
vector <vector <int>> mult;
int v[5 + nmax];
void reunion(int gala ,int galb){
if(gala != galb){
if(mult[gala].size() <= mult[galb].size()){
for(int i = 0 ; i < mult[gala].size() ;i++){
mult[galb].push_back(mult[gala][i]);
v[mult[gala][i]] = galb;
}
mult[gala].clear();
} else{
for(int i = 0 ; i < mult[galb].size() ;i++){
mult[gala].push_back(mult[galb][i]);
v[mult[galb][i]] = gala;
}
mult[galb].clear();
}
}
}
int main()
{
int n ,m;
in>>n>>m;
for(int i = 0 ; i <= n ;i++){
v[i] = i;
vector<int> temp;
temp.push_back(i);
mult.push_back(temp);
}
int p ,x , y;
for(int i = 0 ; i < m ;i++){
in>>p>>x>>y;
if(p == 1){
reunion(v[x],v[y]);
}else{
if(v[x] != v[y])
out<<"NU\n";
else
out<<"DA\n";
}
}
return 0;
}