2
public double[] calcEquation(3
List<List<String>> equations, double[] values, List<List<String>> queries) {4
int len = equations.size();5
Map<String, Integer> varMap = new HashMap<>();7
for (int i = 0; i < len; i++) {8
if (!varMap.containsKey(equations.get(i).get(0))) {9
varMap.put(equations.get(i).get(0), varCnt++);11
if (!varMap.containsKey(equations.get(i).get(1))) {12
varMap.put(equations.get(i).get(1), varCnt++);16
List<Pair>[] edges = new List[varCnt];17
for (int i = 0; i < varCnt; i++) {18
edges[i] = new ArrayList<>();21
for (int i = 0; i < len; i++) {22
int va = varMap.get(equations.get(i).get(0));23
int vb = varMap.get(equations.get(i).get(1));24
edges[va].add(new Pair(vb, values[i]));25
edges[vb].add(new Pair(va, 1.0 / values[i]));28
int queriesCnt = queries.size();29
double[] ans = new double[queriesCnt];30
for (int i = 0; i < queriesCnt; i++) {31
List<String> query = queries.get(i);33
if (varMap.containsKey(query.get(0)) && varMap.containsKey(query.get(1))) {34
int idxA = varMap.get(query.get(0));35
int idxB = varMap.get(query.get(1));39
Queue<Integer> points = new LinkedList<>();41
double[] ratios = new double[varCnt];42
Arrays.fill(ratios, -1.0);44
while (!points.isEmpty() && ratios[idxB] < 0) {45
int cur = points.poll();46
for (Pair pair : edges[cur]) {48
double value = pair.value;50
ratios[y] = ratios[cur] * value;56
result = ratios[idxB];70
public Pair(int index, double value) {