Untitled
plain_text
a month ago
1.5 kB
5
Indexable
Never
class Solution { public: int cut(vector<vector<int>>& roads, vector<int> counts, int maxCity) { int maxRank = 0; for (const auto& road : roads) { if (road[0] == maxCity) { --counts[road[1]]; } if (road[1] == maxCity) { --counts[road[0]]; } } for (int i = 0; i < counts.size(); ++i) { if (i != maxCity && counts[i] > maxRank) { maxRank = counts[i]; } } return maxRank; } int maximalNetworkRank(int n, vector<vector<int>>& roads) { vector<int> counts(n, 0); for (const auto& road : roads) { ++counts[road[0]]; ++counts[road[1]]; } int maxCity1 = distance(counts.begin(), max_element(counts.begin(), counts.end())); int maxCity2; for (int i = counts.size() - 1; i >= 0; --i) { if (counts[i] == counts[maxCity1]) { maxCity2 = i; break; } } if (maxCity1 != maxCity2) { return max(cut(roads, counts, maxCity1), cut(roads, counts, maxCity2)) + counts[maxCity1]; } else { return cut(roads, counts, maxCity1) + counts[maxCity1]; } } };