class Solution:
def minScore(self, n: int, roads: list[list[int]]) -> int:
adj = defaultdict(list)
for src, dst, dist in roads:
adj[src].append((dst, dist))
adj[dst].append((src, dist))
res = float("inf")
visit = set()
def dfs(node):
nonlocal res
if node in visit:
return
visit.add(node)
for nei, dist in adj[node]:
res = min(res, dist)
dfs(nei)
dfs(1)
return resWhere is the number of vertices and is the number of edges.
class Solution:
def minScore(self, n: int, roads: list[list[int]]) -> int:
adj = [[] for _ in range(n + 1)]
for src, dst, dist in roads:
adj[src].append((dst, dist))
adj[dst].append((src, dist))
res = float("inf")
visit = [False] * (n + 1)
q = deque([1])
visit[1] = True
while q:
node = q.popleft()
for nei, dist in adj[node]:
res = min(res, dist)
if not visit[nei]:
visit[nei] = True
q.append(nei)
return resWhere is the number of vertices and is the number of edges.
class Solution:
def minScore(self, n: int, roads: list[list[int]]) -> int:
adj = [[] for _ in range(n + 1)]
for src, dst, dist in roads:
adj[src].append((dst, dist))
adj[dst].append((src, dist))
res = float("inf")
visit = [False] * (n + 1)
stack = [1]
visit[1] = True
while stack:
node = stack.pop()
for nei, dist in adj[node]:
res = min(res, dist)
if not visit[nei]:
visit[nei] = True
stack.append(nei)
return resWhere is the number of vertices and is the number of edges.
class DSU:
def __init__(self, n):
self.Parent = list(range(n + 1))
self.Size = [1] * (n + 1)
def find(self, node):
if self.Parent[node] != node:
self.Parent[node] = self.find(self.Parent[node])
return self.Parent[node]
def union(self, u, v):
pu, pv = self.find(u), self.find(v)
if pu == pv:
return False
if self.Size[pu] >= self.Size[pv]:
self.Size[pu] += self.Size[pv]
self.Parent[pv] = pu
else:
self.Size[pv] += self.Size[pu]
self.Parent[pu] = pv
return True
class Solution:
def minScore(self, n: int, roads: list[list[int]]) -> int:
dsu = DSU(n)
for src, dst, _ in roads:
dsu.union(src, dst)
res = float("inf")
root = dsu.find(1)
for src, dst, dist in roads:
if dsu.find(src) == root:
res = min(res, dist)
return resWhere is the number of vertices and is the number of edges in the graph. is used for amortized complexity.