classSolution:defcalcEquation(self, equations, values, queries):parent ={}weight ={}# 初始化并查集for a, b in equations:if a notin parent:parent[a]= aweight[a]=1.0if b notin parent:parent[b]= bweight[b]=1.0# 路径压缩的查找函数deffind(x):if parent[x]!= x:orig_parent = parent[x]parent[x]= find(parent[x])weight[x]*= weight[orig_parent]# 路径压缩时更新权重return parent[x]# 合并操作for(a, b), val inzip(equations, values):ra, rb = find(a), find(b)if ra != rb:parent[ra]= rbweight[ra]=(val * weight[b])/ weight[a]# 根据等式调整根节点权重# 处理查询 (修正continue语句语法错误)res =[]for c, d in queries:# Case 1: 变量未定义if c notin parent or d notin parent:res.append(-1.0)continue# 移至下一循环# Case 2: 计算路径权重rc, rd = find(c), find(d)if rc != rd:res.append(-1.0)else:res.append(weight[c]/ weight[d])return res
classSolution{Map<String,String> parent =newHashMap<>();Map<String,Double> weight =newHashMap<>();publicdouble[]calcEquation(List<List<String>> equations,double[] values,List<List<String>> queries){// 初始化并查集for(List<String> eq : equations){String a = eq.get(0), b = eq.get(1);parent.putIfAbsent(a, a);parent.putIfAbsent(b, b);weight.putIfAbsent(a,1.0);weight.putIfAbsent(b,1.0);}// 合并操作for(int i =0; i < equations.size(); i++){String a = equations.get(i).get(0), b = equations.get(i).get(1);union(a, b, values[i]);}// 处理查询double[] res =newdouble[queries.size()];for(int i =0; i < queries.size(); i++){String c = queries.get(i).get(0), d = queries.get(i).get(1);if(!parent.containsKey(c)||!parent.containsKey(d)){res[i]=-1.0;continue;}String rc =find(c), rd =find(d);if(!rc.equals(rd)) res[i]=-1.0;else res[i]= weight.get(c)/ weight.get(d);}return res;}privateStringfind(String x){if(!x.equals(parent.get(x))){String origParent = parent.get(x);parent.put(x,find(origParent));weight.put(x, weight.get(x)* weight.get(origParent));}return parent.get(x);}privatevoidunion(String a,String b,double val){String ra =find(a), rb =find(b);if(ra.equals(rb))return;parent.put(ra, rb);weight.put(ra,(val * weight.get(b))/ weight.get(a));}}