Pagini recente » Cod sursa (job #2668649) | Cod sursa (job #781200) | Cod sursa (job #3288623) | Cod sursa (job #58450) | Cod sursa (job #2808355)
#include <fstream>
#include <vector>
#define Nmax 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int parent[Nmax];
int findParent(int i){
int root = i;
//mergem pe vectorul de tati spre radacina
while(parent[root] != root){
root = parent[root];
}
//path compression
while(i != root){
int next = parent[i];
parent[i] = root;
i = next;
}
return root;
}
void unify (int x, int y){
int px = findParent(x);
int py = findParent(y);
parent[px] = py;
}
int main()
{
int n, m, question, a, b;
f >> n >> m;
for(int i = 0; i < n; ++i){
parent[i] = i;
}
for(int i = 0; i < m; ++i){
f >> question >> a >> b;
if(question == 1){
unify(a, b);
}
else if(question == 2){
if(findParent(a) != findParent(b)){
g << "NU\n";
}
else{
g << "DA\n";
}
}
}
f.close();
g.close();
return 0;
}