#include <bits/stdc++.h>
using namespace std;
long long m;
long long g(const pair<long long,long long>& a, const pair<long long,long long>& b) {
    long long inf = (1LL << 60);
    pair<long long,long long> d{ llabs(b.first - a.first), llabs(b.second - a.second) };
    if (m == 1) return d.first + d.second;
    long long vx = (d.first / (m + 1)) * (m + 1);
    long long vy = (d.second / (m + 1)) * (m + 1);
    long long best = inf;
    vector<pair<long long,long long>> c{{vx, vy}, {vx, vy + m + 1}, {vx + m + 1, vy}, {vx + m + 1, vy + m + 1}};
    for (auto p : c) {
        long long res = (p.first / (m + 1)) * 2 + (p.second / (m + 1)) * 2;
        long long dx = llabs(p.first - d.first);
        long long dy = llabs(p.second - d.second);
        res += (dx != 0 && p.second == 0) ? (2 + dx) : dx;
        res += (dy != 0 && p.first == 0) ? (2 + dy) : dy;
        best = min(best, res);
    }
    return best;
}
int main() {
    // freopen("main.in", "r", stdin);
	  // freopen(".out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    long long k;
    cin >> k >> m;
    long long sx, sy, ex, ey;
    cin >> sx >> sy >> ex >> ey;
    pair<long long,long long> s{sx, sy}, e{ex, ey};
    vector<vector<pair<long long,long long>>> l(k + 1);
    l[0].push_back(s);
    for (long long i = 1; i < k; ++i) {
        long long cnt; 
        cin >> cnt;
        l[i].reserve(cnt);
        for (long long j = 0; j < cnt; ++j) {
            long long x, y; 
            cin >> x >> y;
            l[i].push_back({x, y});
        }
    }
    l[k].push_back(e);
    long long inf = (1LL << 60);
    vector<vector<long long>> dp(k + 1);
    for (long long i = 0; i <= k; ++i) dp[i].assign(l[i].size(), inf);
    dp[0][0] = 0;
    for (long long i = 0; i < k; ++i) {
        for (size_t u = 0; u < l[i].size(); ++u) {
            if (dp[i][u] >= inf) continue;
            for (size_t v = 0; v < l[i + 1].size(); ++v) {
                dp[i + 1][v] = min(dp[i + 1][v], dp[i][u] + g(l[i][u], l[i + 1][v]));
            }
        }
    }
    cout << dp[k][0] << endl;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |