Leetcode-3243

Shortest Distance After Road Addition Queries I

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <vector>
#include <numeric>

class Solution {
public:
    std::vector<int> shortestDistanceAfterQueries(int n, std::vector<std::vector<int>>& queries) {
        int m = queries.size();
        std::vector<int> dp(n);
        std::iota(dp.begin(), dp.end(), 0);
        std::vector<std::vector<int>> adj(n);
        std::vector<int> res(m);
        
        for (int i = 0; i < m; ++i) {
            adj[queries[i][1]].push_back(queries[i][0]);
            if (dp[queries[i][0]] + 1 < dp[queries[i][1]]) {
               dp[queries[i][1]] = dp[queries[i][0]] + 1;
               for (int j = queries[i][1] + 1; j < n; ++j) {
                   dp[j] = std::min(dp[j], dp[j - 1] + 1);
                   for (auto& k : adj[j]) {
                       dp[j] = std::min(dp[j], dp[k] + 1);
                   }
               }
            }
            res[i] = dp.back();
        }        
        return res;
    }
};

Leetcode-3243

Licensed under CC BY-NC-SA 4.0