Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- https://leetcode.com/problems/minimum-cost-of-a-path-with-special-roads/
- You are given an array start where start = [startX, startY] represents your initial position (startX, startY) in a 2D space. You are also given the array target where target = [targetX, targetY] represents your target position (targetX, targetY).
- The cost of going from a position (x1, y1) to any other position in the space (x2, y2) is |x2 - x1| + |y2 - y1|.
- There are also some special roads. You are given a 2D array specialRoads where specialRoads[i] = [x1i, y1i, x2i, y2i, costi] indicates that the ith special road can take you from (x1i, y1i) to (x2i, y2i) with a cost equal to costi. You can use each special road any number of times.
- Return the minimum cost required to go from (startX, startY) to (targetX, targetY).
- Example 1:
- Input: start = [1,1], target = [4,5], specialRoads = [[1,2,3,3,2],[3,4,4,5,1]]
- Output: 5
- Explanation: The optimal path from (1,1) to (4,5) is the following:
- - (1,1) -> (1,2). This move has a cost of |1 - 1| + |2 - 1| = 1.
- - (1,2) -> (3,3). This move uses the first special edge, the cost is 2.
- - (3,3) -> (3,4). This move has a cost of |3 - 3| + |4 - 3| = 1.
- - (3,4) -> (4,5). This move uses the second special edge, the cost is 1.
- So the total cost is 1 + 2 + 1 + 1 = 5.
- It can be shown that we cannot achieve a smaller total cost than 5.
- Example 2:
- Input: start = [3,2], target = [5,7], specialRoads = [[3,2,3,4,4],[3,3,5,5,5],[3,4,5,6,6]]
- Output: 7
- Explanation: It is optimal to not use any special edges and go directly from the starting to the ending position with a cost |5 - 3| + |7 - 2| = 7.
- Constraints:
- start.length == target.length == 2
- 1 <= startX <= targetX <= 10^5
- 1 <= startY <= targetY <= 10^5
- 1 <= specialRoads.length <= 200
- specialRoads[i].length == 5
- startX <= x1i, x2i <= targetX
- startY <= y1i, y2i <= targetY
- 1 <= costi <= 10^5
- ---------------------------------------------------------------------------------------------------------------------------------------
- class Solution {
- public:
- int minimumCost(vector<int>& start, vector<int>& target, vector<vector<int>>& specialRoads) {
- queue<pair<int,pair<int,int>>> q;
- int n=specialRoads.size();
- vector<int> dp(n+1,INT_MAX);
- q.push({0,{start[0],start[1]}});
- int res=INT_MAX;
- while(!q.empty()){
- auto info=q.front();
- q.pop();
- int dist=info.first;
- int x=info.second.first;
- int y=info.second.second;
- res=min(res,dist+abs(target[0]-x)+abs(target[1]-y));
- int i=0;
- for(auto c: specialRoads){
- int sx=c[0];
- int sy=c[1];
- int dx=c[2];
- int dy=c[3];
- int cost=c[4];
- if(abs(x-sx)+abs(y-sy)+dist+cost<dp[i]){
- q.push({abs(x-sx)+abs(y-sy)+dist+cost,{dx,dy}});
- dp[i]=abs(x-sx)+abs(y-sy)+dist+cost;
- }
- i++;
- }
- }
- return res;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment