From 59ae85f8ca9f7d817d6b195d8503e112438d77d6 Mon Sep 17 00:00:00 2001 From: Thejaswin <52855622+thejaswin123@users.noreply.github.com> Date: Sun, 18 Oct 2020 12:15:44 +0530 Subject: [PATCH] Create difftree.cpp --- tree/difftree.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 tree/difftree.cpp diff --git a/tree/difftree.cpp b/tree/difftree.cpp new file mode 100644 index 00000000..04a8a5fc --- /dev/null +++ b/tree/difftree.cpp @@ -0,0 +1,66 @@ +#include +using namespace std; +int maximum(int a,int b); +void initialiseSets(vector &parent, vector &size, multiset &sizesOfSets,int n) +{ + for(int i = 1;i <= n;i++) + { + parent[i] = i; + size[i] = 1; + sizesOfSets.insert(1); + } +} + +int findParent(int camper, vector &parent) +{ + if(parent[camper] == camper) return camper; + return parent[camper] = findParent(parent[camper], parent); +} + +void setUnion(int camper1,int camper2, vector &parent, vector &size, multiset &sizesOfSets) +{ + int parent1 = findParent(camper1,parent); + int parent2 = findParent(camper2,parent); + if(parent1 != parent2) + { + parent[parent1] = parent2; + sizesOfSets.erase(sizesOfSets.find(size[parent1])); + sizesOfSets.erase(sizesOfSets.find(size[parent2])); + size[parent2] += size[parent1]; + sizesOfSets.insert(size[parent2]); + } +} + +vector findSolution(vector< pair > &queries, int n) +{ +vector parent(n+1); +vector size(n+1); +multiset sizesOfSets; + +initialiseSets(parent,size,sizesOfSets,n); + +int numberOfQueries = queries.size(); +vector ans; +for(int i = 0;i < numberOfQueries;i++) { + int camper1 = queries[i].first; + int camper2 = queries[i].second; + setUnion(camper1,camper2,parent,size,sizesOfSets); + ans.push_back(*(--sizesOfSets.end()) - *sizesOfSets.begin()); +} +return ans; +} +int main() { + int i,j,k,l,m,n,t,q; + cin >> n >> q; + vector< pair > queries; + while(q--) { + int u,v; + cin >> u >> v; + queries.push_back({u,v}); + } + vector ans = findSolution(queries,n); + for(int an : ans) { + cout << an << endl; + } + +}