From 5c35ebfaf74f409872978c61b4d03786e74735fc Mon Sep 17 00:00:00 2001 From: Kshitiz Sharma <110187324+kshitiz11101@users.noreply.github.com> Date: Wed, 10 Jul 2024 22:40:43 +0530 Subject: [PATCH] Create AccountMerge.cpp --- Graphs/AccountMerge.cpp | 81 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 Graphs/AccountMerge.cpp diff --git a/Graphs/AccountMerge.cpp b/Graphs/AccountMerge.cpp new file mode 100644 index 0000000..40f6e56 --- /dev/null +++ b/Graphs/AccountMerge.cpp @@ -0,0 +1,81 @@ +// User function Template for C++ +class DisjointSet { + public: + vector rank, parent; + + DisjointSet(int n) { + rank.resize(n+1, 0); + parent.resize(n+1); + + for(int i=0; i<=n; i++) { + parent[i] = i; + } + } + + int findUParent(int node) { + if(parent[node] == node) + return node; + + return parent[node] = findUParent(parent[node]); + } + + void unionByRank(int u, int v) { + int ul_parent_u = findUParent(u); + int ul_parent_v = findUParent(v); + + if(ul_parent_u == ul_parent_v) + return; + + if(rank[ul_parent_u] < rank[ul_parent_v]) { + parent[ul_parent_u] = ul_parent_v; + } + else if(rank[ul_parent_v] < rank[ul_parent_u]) { + parent[ul_parent_v] = ul_parent_u; + } + else { + parent[ul_parent_v] = ul_parent_u; + rank[ul_parent_u]++; + } + } +}; + +class Solution { + public: + vector> accountsMerge(vector> &accounts) { + // code here + int n=accounts.size(); + unordered_mapm; + DisjointSet ds(n); + for(int i=0;i mergeMail[n]; + for(auto it:m){ + string mail=it.first; + int node=ds.findUParent(it.second); + mergeMail[node].push_back(mail); + } + vector>ans; + for(int i=0;itemp; + temp.push_back(accounts[i][0]); + for(auto it:mergeMail[i]){ + temp.push_back(it); + } + ans.push_back(temp); + } + return ans; + } +};