Untitled
unknown
plain_text
15 days ago
2.3 kB
4
Indexable
class Solution { public: int getMinCost(int gNodes, vector<int>& gFrom, vector<int>& gTo, vector<int>& gWeight, vector<int>& arr, int A, int B) { vector<vector<pair<int, int>>> graph(gNodes + 1); for (int i = 0; i < gFrom.size(); i++) { int u = gFrom[i]; int v = gTo[i]; int w = gWeight[i]; graph[u].push_back({v, w}); graph[v].push_back({u, w}); } vector<long long> min_cost(gNodes + 1, 0); for(int i=0;i<gNodes+1;i++){ min_cost[i]=LLONG_MAX; } min_cost[A] = 0; priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> pq; long long minVal = arr[A-1]; pq.push({0, A}); while (!pq.empty()) { long long current_cost = pq.top().first; int current_city = pq.top().second; cout<<"current_city"<<current_city<<endl; pq.pop(); if(arr[current_city-1] > minVal){ arr[current_city-1] = minVal; } else{ minVal = arr[current_city-1]; } if (current_city == B) { return current_cost; } if (current_cost > min_cost[current_city]) { continue; } for (auto& [neighbor, weight] : graph[current_city]) { cout<<current_city<<" "<<neighbor<<" "<<min_cost[current_city]; cout<<endl; long long travel_cost = weight * arr[current_city-1]; cout<<weight<<" "<<arr[current_city-1]<<" "<<travel_cost<<endl; long long total_cost = min_cost[current_city] + travel_cost; if (total_cost < min_cost[neighbor]) { cout<<total_cost<<endl; min_cost[neighbor] = total_cost; pq.push({total_cost, neighbor}); } } } return min_cost[B] == LLONG_MAX ? -1 : min_cost[B]; } };
Editor is loading...
Leave a Comment