Untitled

 avatar
unknown
plain_text
a year ago
1.5 kB
5
Indexable
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];
        }
    }
};