Pagini recente » Cod sursa (job #1464942) | Cod sursa (job #763831) | Cod sursa (job #2822607) | Cod sursa (job #559906) | Cod sursa (job #2644436)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n , m;
vector<int> parent(n + 1,0);
vector<int> nr(n + 1,0);
int radacina(int x){
if(parent[x] == 0){
return x;
}
parent[x] = radacina(parent[x]);
return parent[x];
}
void union1(int x, int y){
int radx = radacina(x);
int rady = radacina(y);
if( radx == rady){
return;
}
if( nr[x] > nr[y]){
parent[rady] = radx;
nr[radx] += nr[rady];
}
else{
parent[radx] = rady;
nr[rady] += nr[radx];
}
}
int main(){
int x, y, cond;
f >> n >> m;
for(int i = 0 ; i <= n; i++){
nr[i] = 1;
}
for(int i = 0 ; i < m; i++){
f >> cond >> x >> y;
if( cond == 1){
union1(x,y);
}
else{
if(radacina(x) == radacina(y)){
g <<"DA"<<"\n";
}
else{
g << "NU"<<"\n";
}
}
}
}