afatnan
Senior Member
Tai vi de bai bao len(roads) la O(n^2) roi nen ko muon toi uu phan sau nua.Hehe toàn solution O(n^2 + v). Giờ nó tăng n lên 1000000 thì time out kĩ. Giải solution O(n + v) cho chất
Python:class Solution: def maximalNetworkRank(self, n: int, roads: List[List[int]]) -> int: adj_edges = [0 for node in range(n)] for node1, node2 in roads: adj_edges[node1] += 1 adj_edges[node2] += 1 first_max_edges = 0 second_max_edges = 0 first_max_nodes = [] second_max_nodes = [] for node in range(n): if adj_edges[node] > first_max_edges: second_max_edges = first_max_edges second_max_nodes = first_max_nodes first_max_edges = adj_edges[node] first_max_nodes = [node] elif adj_edges[node] == first_max_edges: first_max_nodes.append(node) elif adj_edges[node] > second_max_edges: second_max_edges = adj_edges[node] second_max_nodes = [node] elif adj_edges[node] == second_max_edges: second_max_nodes.append(node) # print(first_max_edges, first_max_nodes) # print(second_max_edges, second_max_nodes) if len(first_max_nodes) == 1: max_node = first_max_nodes[0] total_edges_2_cities = first_max_edges + second_max_edges roads = set([tuple(road) for road in roads]) # print(max_node) for node in second_max_nodes: if (node, max_node) not in roads \ and (max_node, node) not in roads: return total_edges_2_cities return total_edges_2_cities - 1 total_edges_2_cities = first_max_edges * 2 total_edges_max_nodes = 0 first_max_nodes = set(first_max_nodes) for node1, node2 in roads: if node1 in first_max_nodes \ and node2 in first_max_nodes: total_edges_max_nodes += 1 if total_edges_max_nodes * 2 \ == len(first_max_nodes) * (len(first_max_nodes) - 1): total_edges_2_cities -= 1 return total_edges_2_cities
. Giải solution O(n + v) cho chất
. nếu n lên 1 củ thì cách kia timeout


