Skip to content

Instantly share code, notes, and snippets.

@AashishNandakumar
Created October 8, 2024 11:57
Show Gist options
  • Save AashishNandakumar/a8fb6d9b5fa4249bedcb4049c1e5d920 to your computer and use it in GitHub Desktop.
Save AashishNandakumar/a8fb6d9b5fa4249bedcb4049c1e5d920 to your computer and use it in GitHub Desktop.
def getNumPairs(server_nodes, server_from, server_to, server_weight, signal_speed):
# Step 1: Create an adjacency list to represent the graph
graph = {i: [] for i in range(1, server_nodes + 1)}
for i in range(len(server_from)):
graph[server_from[i]].append((server_to[i], server_weight[i]))
graph[server_to[i]].append((server_from[i], server_weight[i]))
# Step 2: Implement Depth-First Search (DFS) to find all paths
def dfs(start, end, path, distance):
path.append(start)
if start == end:
return [(path[:], distance)]
if start not in graph:
return []
paths = []
for neighbor, weight in graph[start]:
if neighbor not in path:
new_paths = dfs(neighbor, end, path, distance + weight)
paths.extend(new_paths)
path.pop()
return paths
# Step 3: Count valid pairs for each server
result = []
for server in range(1, server_nodes + 1):
valid_pairs = 0
for target in range(1, server_nodes + 1):
if server != target:
paths = dfs(server, target, [], 0)
for path, distance in paths:
if distance % signal_speed == 0:
valid_pairs += 1
break
result.append(valid_pairs)
return result
# Sample test case
server_nodes = 4
server_from = [1, 1, 2]
server_to = [2, 3, 4]
server_weight = [2, 5, 3]
signal_speed = 5
output = getNumPairs(server_nodes, server_from, server_to, server_weight, signal_speed)
print(output) # Expected output: [2, 0, 2, 2]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment