Skip to content

Commit cd20dac

Browse files
committed
Time: 0 ms (100.00%), Space: 8.4 MB (35.76%) - LeetHub
1 parent ba62b7e commit cd20dac

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
class Solution {
2+
public:
3+
double globans;
4+
void dfs(string x, string end,map<string, vector<pair<string,double>>>& adj, set<string>& vis, double val){
5+
vis.insert(x);
6+
if(x == end){
7+
globans = val;
8+
return;
9+
}
10+
11+
for(auto u: adj[x]){
12+
if(vis.count(u.first) == 0){
13+
dfs(u.first, end, adj, vis, 1.0 * val * u.second);
14+
}
15+
}
16+
}
17+
18+
vector<double> calcEquation(vector<vector<string>>& equations, vector<double>& values, vector<vector<string>>& queries) {
19+
map<string, vector<pair<string,double>>> adj;
20+
int n = equations.size();
21+
// create graph
22+
for (int i = 0; i < n; ++i){
23+
string num = equations[i][0];
24+
string den = equations[i][1];
25+
adj[num].push_back({den, values[i] * 1.0});
26+
adj[den].push_back({num, 1.0 / values[i]});
27+
}
28+
29+
// queries
30+
int q = queries.size();
31+
vector<double> ans;
32+
for (int i = 0; i < q; ++i){
33+
string num = queries[i][0];
34+
string den = queries[i][1];
35+
36+
if(adj.find(num) == adj.end() or adj.find(den) == adj.end()){
37+
ans.push_back(-1.0);
38+
continue;
39+
}
40+
set<string> vis;
41+
double val = 1.0;
42+
globans = -1.0;
43+
dfs(num, den, adj, vis, val);
44+
ans.push_back(globans);
45+
}
46+
47+
return ans;
48+
}
49+
};

0 commit comments

Comments
 (0)