Pagini recente » Rating Bostan Alexandru Ionut (ooflul) | Cod sursa (job #2809664)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#define MAX 100001
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout("disjoint.out");
class Graf{
public:
//date membre
vector <pair<pair<int, int>, int> > A;
//nr noduri
int mN;
vector<int> parent;
//constructor
Graf(int N){
mN = N;
parent.resize(N+1);
for(int i = 1; i <= N; i++)
parent[i] = i;
}
void CitireG(int M);
int Find(int x);
void Union(int x, int y);
};
void Graf:: CitireG(int M){
int x,y,op;
for(int i = 0; i < M; i++){
fin >> op >> x >> y;
if(op == 1){
Union(x,y);
}
else
if(Find(x) == Find(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
int Graf :: Find(int x){
//daca nu mai gasim tata pentru nodul curent
if( x == parent[x])
return x;
//mergem din tata in tata pana gasim nodul de start
//si le punem tuturor acelasi tata
parent[x] = Find(parent[x]);
return parent[x];
}
void Graf :: Union (int x, int y){
//gasim radacina/stramosul fiecarei componente pe care vrem sa le unim
int px = Find(x);
int py = Find(y);
parent[px] = py;
}
int main(){
int N, M;
fin >> N >> M;
Graf G(N);
G.CitireG(M);
return 0;
}