Pagini recente » Cod sursa (job #2765930) | Cod sursa (job #1140485) | Cod sursa (job #2294426) | Cod sursa (job #1158919) | Cod sursa (job #2808353)
#include <fstream>
#include <vector>
#include <iostream>
#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)){
cout << "NU\n";
}
else{
cout << "DA\n";
}
}
}
f.close();
g.close();
return 0;
}