Pagini recente » Cod sursa (job #1877027) | Cod sursa (job #731794) | Cod sursa (job #2798294) | Cod sursa (job #1553717) | Cod sursa (job #3260410)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int getRep(int a, vector<int> &parent) {
if(parent[a] == 0)
return a;
return parent[a] = getRep(parent[a], parent);
}
void combine(int a, int b, vector<int> &size, vector<int> &parent) {
if(a == b)
return ;
if(size[a] >= size[b]) {
parent[b] = a;
size[a] += size[b];
}
else {
parent[a] = b;
size[b] += size[a];
}
}
int main() {
int noNodes, noEdges;
fin >> noNodes >> noEdges;
vector<int> parent(noNodes+1, 0);
vector<int> psize(noNodes+1, 1);
for(int i=1; i<=noEdges; i++) {
int query, firstNode, secondNode;
fin >> query >> firstNode >> secondNode;
int rep1 = getRep(firstNode, parent);
int rep2 = getRep(secondNode, parent);
if(query == 1) {
combine(rep1, rep2, psize, parent);
}
else {
if(rep1 == rep2)
fout << "DA" << '\n';
else
fout << "NU" << '\n';
}
}
return 0;
}