int maxCities(int n, vector<int> a, vector<int> b, vector<int> len) { if (n <= 2) return n; vector<vector<int>> adjNode(n); for (int i = 0; i < n-1; ++i) { --a[i]; --b[i]; adjNode[a[i]].push_back(b[i]); adjNode[b[i]].push_back(a[i]); distMap[{a[i], b[i]}] = len[i]; distMap[{b[i], a[i]}] = len[i]; } int maxCount = 2; for (int i = 0; i < n; ++i) { Mii m; for (int j : adjNode[i]) { Si s; // node, parent ST<Pii> st; Vi d(n, -1); d[i] = 0; st.emplace(j, i); while (!st.empty()) { Pii p = st.top(); d[p.first] = dist(p.first, p.second) + d[p.second]; s.insert(d[p.first]); st.pop(); for (int k : adjNode[p.first]) { if (k == p.second) continue; st.emplace(k, p.first); } } for (int dd : s) { if (m.count(dd)) { ++m[dd]; } else m[dd] = 1; } } for (Pii t : m) { if (t.second > maxCount) maxCount = t.second; } } return maxCount; }