3
vector<double> calcEquation(vector<vector<string>> &equations, vector<double> &values,4
vector<vector<string>> &queries) {5
map<string, vector<pair<string, double>>> graph;6
map<string, double> dist;7
map<string, bool> visited;8
for (int i = 0; i < equations.size(); i++) {9
if (graph.count(equations[i][0]) == 0) {10
graph[equations[i][0]] = {};11
visited[equations[i][0]] = false;12
dist[equations[i][0]] = DBL_MAX;14
if (graph.count(equations[i][1]) == 0) {15
graph[equations[i][1]] = {};16
dist[equations[i][0]] = DBL_MAX;18
graph[equations[i][0]].push_back({equations[i][1], values[i]});20
graph[equations[i][1]].push_back({equations[i][0], 1 / values[i]});22
graph[equations[i][1]].push_back({equations[i][0], -1});24
vector<double> result;25
for (int i = 0; i < queries.size(); i++) {26
if (graph.count(queries[i][0]) == 0 || graph.count(queries[i][1]) == 0) {30
if (queries[i][0] == queries[i][1]) {34
for (auto j : visited) visited[j.first] = false;35
priority_queue<pair<double, string>, vector<pair<double, string>>,36
greater<pair<double, string>>>38
dist[queries[i][0]] = 1;40
pq.push({1, queries[i][0]});45
visited[k.second] = true;46
if (k.second == queries[i][1]) {48
result.push_back(dist[k.second]);51
for (int j = 0; j < graph[k.second].size(); j++) {52
if (!visited[graph[k.second][j].first]) {53
dist[graph[k.second][j].first] = dist[k.second] * graph[k.second][j].second;54
pq.push({dist[graph[k.second][j].first], graph[k.second][j].first});58
if (!flag) result.push_back(-1);