From 37c129a99dfb2c5392caccaec0a80b9118bc4c36 Mon Sep 17 00:00:00 2001 From: chayan das <110921638+Chayandas07@users.noreply.github.com> Date: Tue, 24 Dec 2024 23:02:49 +0530 Subject: [PATCH] Create 3203. Find Minimum Diameter After Merging Two Trees --- ...d Minimum Diameter After Merging Two Trees | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 3203. Find Minimum Diameter After Merging Two Trees diff --git a/3203. Find Minimum Diameter After Merging Two Trees b/3203. Find Minimum Diameter After Merging Two Trees new file mode 100644 index 0000000..ef144d9 --- /dev/null +++ b/3203. Find Minimum Diameter After Merging Two Trees @@ -0,0 +1,51 @@ +class Solution { +public: + void dfs(int node, int par, int dis, int &maxi, vector>&adj, int &far){ + if(dis>maxi){ + maxi = dis; + far = node; + } + for(auto it:adj[node]){ + if(it!=par){ + dfs(it, node, dis+1, maxi, adj, far); + } + } + } + + int minimumDiameterAfterMerge(vector>& edges1, vector>& edges2) { + int n = edges1.size()+1; + int m = edges2.size()+1; + vector>adj1(n); + vector>adj2(m); + for(auto it: edges1){ + adj1[it[0]].push_back(it[1]); + adj1[it[1]].push_back(it[0]); + } + + int maxi1 = 0; + int far = 0; + dfs(0, -1, 0, maxi1, adj1, far); + + maxi1 = 0; + int far1 = 0; + dfs(far, -1, 0, maxi1, adj1, far1); + + for(auto it: edges2){ + adj2[it[0]].push_back(it[1]); + adj2[it[1]].push_back(it[0]); + } + + int maxi2 = 0; + far = 0; + dfs(0, -1, 0, maxi2, adj2, far); + + maxi2 = 0; + int far2 = 0; + dfs(far, -1, 0, maxi2, adj2, far2); + + int tmp1 = (maxi1+1)/2; + int tmp2 = (maxi2+1)/2; + int mrg = tmp1+tmp2+1; + return max(maxi1, max(mrg, maxi2)); + } +};