Pagini recente » Cod sursa (job #481874) | Cod sursa (job #1706827) | Cod sursa (job #654009) | Cod sursa (job #1194448) | Cod sursa (job #2684750)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
std::ifstream fin("disjoint.in");
std::ofstream fout("disjoint.out");
int parent[100005];
int rank[100005];
void addSet(int node){
parent[node] = node;
rank[node] = 1;
}
int findRoot(int node){
if(parent[node] == node) return node;
parent[node] = findRoot(parent[node]);
return parent[node];
}
void unionSets(int node1, int node2){
node1 = findRoot(node1);
node2 = findRoot(node2);
if(node1 == node2) return;
if(rank[node1] < rank[node2])
std::swap(node1, node2);
if(rank[node1] == rank[node2])
rank[node1] ++;
parent[node2] = node1;
}
int main(){
int V, Q;
fin >> V >> Q;
for(int i=1; i<=V; i++)
addSet(i);
int type, node1, node2;
for(int q=0; q<Q; q++){
fin >> type >> node1 >> node2;
if(type == 1){
unionSets(node1, node2);
}
else{
if(findRoot(node1) == findRoot(node2)) fout << "DA\n";
else fout << "NU\n";
}
}
return 0;
}