方法一:直接用邻接矩阵保存相邻的边
class Solution {
public:
int maximalNetworkRank(int n, vector<vector<int>>& roads) {
vector<vector<int>> edges(n);
set<pair<int, int>> isConnect;
for (auto road : roads) {
int v0 = road[0], v1 = road[1];
edges[v0].push_back(v1);
edges[v1].push_back(v0);
isConnect.insert({v0, v1});
isConnect.insert({v1, v0});
}
int res = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int rank = edges[i].size() + edges[j].size() - (isConnect.count({i, j}) ? 1 : 0);
res = max(res, rank);
}
}
return res;
}
};
方法二:直接统计出度和用邻接矩阵
class Solution {
public:
int maximalNetworkRank(int n, vector<vector<int>>& roads) {
vector<int> outDegree(n);
vector<vector<int>> graph(n, vector<int>(n));
for (auto road : roads) {
int v0 = road[0], v1 = road[1];
outDegree[v0]++;
outDegree[v1]++;
graph[v0][v1]++;
graph[v1][v0]++;
}
int res = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
res = max(res, outDegree[i] + outDegree[j] - graph[i][j]);
}
}
return res;
}
};