399 graph theory but very funny
This commit is contained in:
parent
c944caec2e
commit
045676e191
55
399-240619-pass/main.py
Normal file
55
399-240619-pass/main.py
Normal file
@ -0,0 +1,55 @@
|
||||
class Solution:
|
||||
def calcEquation(self, equations: list[list[str]], values: list[float], queries: list[list[str]]) -> list[float]:
|
||||
vs = []
|
||||
for equation in equations:
|
||||
first_var = equation[0]
|
||||
second_var = equation[1]
|
||||
if first_var not in vs:
|
||||
vs.append(first_var)
|
||||
if second_var not in vs:
|
||||
vs.append(second_var)
|
||||
index_map = {}
|
||||
for ind, var in enumerate(vs):
|
||||
index_map[var] = ind
|
||||
ls = []
|
||||
vs_len = len(vs)
|
||||
for ind, var in enumerate(vs):
|
||||
ls.append([])
|
||||
for i in range(vs_len):
|
||||
if i == ind:
|
||||
ls[ind].append(1)
|
||||
else:
|
||||
ls[ind].append(-1)
|
||||
for ind, equation in enumerate(equations):
|
||||
first_ind = index_map[equation[0]]
|
||||
second_ind = index_map[equation[1]]
|
||||
ls[first_ind][second_ind] = values[ind]
|
||||
ls[second_ind][first_ind] = 1.0 / values[ind]
|
||||
flag = 1
|
||||
while flag == 1:
|
||||
flag = 0
|
||||
for i in range(vs_len):
|
||||
for j in range(vs_len):
|
||||
for k in range(vs_len):
|
||||
if ls[i][j] != -1 : continue
|
||||
if ls[i][k] == -1 or ls[k][j] == -1: continue
|
||||
flag = 1
|
||||
ls[i][j] = ls[i][k] * ls[k][j]
|
||||
ls[j][i] = 1.0/ls[i][j]
|
||||
output = []
|
||||
for query in queries:
|
||||
if query[0] not in vs or query[1] not in vs:
|
||||
output.append(-1)
|
||||
continue
|
||||
first_ind = index_map[query[0]]
|
||||
second_ind = index_map[query[1]]
|
||||
output.append(ls[first_ind][second_ind])
|
||||
return output
|
||||
|
||||
|
||||
|
||||
|
||||
sol = Solution()
|
||||
print(sol.calcEquation([["a", "b"], ["b", "c"]], [2.0, 3.0], [["a", "c"], ["b", "a"], ["a", "e"], ["a", "a"], ["x", "x"]]))
|
||||
print(sol.calcEquation([["a", "c"], ["b", "e"],["c", "d"], ["e", "d"]], [2.0, 3.0,0.5,5.0], [["a", "b"]]))
|
||||
|
Loading…
Reference in New Issue
Block a user