Skip to content

Commit 37c129a

Browse files
authored
Create 3203. Find Minimum Diameter After Merging Two Trees
1 parent cbd0d13 commit 37c129a

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Solution {
2+
public:
3+
void dfs(int node, int par, int dis, int &maxi, vector<vector<int>>&adj, int &far){
4+
if(dis>maxi){
5+
maxi = dis;
6+
far = node;
7+
}
8+
for(auto it:adj[node]){
9+
if(it!=par){
10+
dfs(it, node, dis+1, maxi, adj, far);
11+
}
12+
}
13+
}
14+
15+
int minimumDiameterAfterMerge(vector<vector<int>>& edges1, vector<vector<int>>& edges2) {
16+
int n = edges1.size()+1;
17+
int m = edges2.size()+1;
18+
vector<vector<int>>adj1(n);
19+
vector<vector<int>>adj2(m);
20+
for(auto it: edges1){
21+
adj1[it[0]].push_back(it[1]);
22+
adj1[it[1]].push_back(it[0]);
23+
}
24+
25+
int maxi1 = 0;
26+
int far = 0;
27+
dfs(0, -1, 0, maxi1, adj1, far);
28+
29+
maxi1 = 0;
30+
int far1 = 0;
31+
dfs(far, -1, 0, maxi1, adj1, far1);
32+
33+
for(auto it: edges2){
34+
adj2[it[0]].push_back(it[1]);
35+
adj2[it[1]].push_back(it[0]);
36+
}
37+
38+
int maxi2 = 0;
39+
far = 0;
40+
dfs(0, -1, 0, maxi2, adj2, far);
41+
42+
maxi2 = 0;
43+
int far2 = 0;
44+
dfs(far, -1, 0, maxi2, adj2, far2);
45+
46+
int tmp1 = (maxi1+1)/2;
47+
int tmp2 = (maxi2+1)/2;
48+
int mrg = tmp1+tmp2+1;
49+
return max(maxi1, max(mrg, maxi2));
50+
}
51+
};

0 commit comments

Comments
 (0)