QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#5311#2601094#13079. 机器人HJ5623HJ5623Failed.2026-07-09 16:24:122026-07-09 16:24:12

Details

Extra Test:

Invalid Input

input (stdin):

0
3 300000 150000
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

output (stdout):


error (stderr):


result:

FAIL Integer parameter [name=n] equals to 3, violates the range [1, 0] (stdin, line 2)

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#2601094#13079. 机器人HJ562397 166ms52624kbC++174.6kb2026-07-09 16:21:192026-07-09 16:34:06

answer

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using i128 = __int128;
const ll MOD = 998244353, G = 3;
template <ll M>
struct mint {
    int x;
    mint(ll v = 0) : x((v % M + M) % M) {}

    mint operator-() const { return x ? M - x : 0; }

    mint& operator+=(mint o) { return *this = *this + o; }
    mint& operator-=(mint o) { return *this = *this - o; }
    mint& operator*=(mint o) { x = (ll)x * o.x % M; return *this; }
    mint& operator/=(mint o) { return *this *= o.inv(); }

    mint operator+(mint o) const { return ((ll)x + o.x) % M; }
    mint operator-(mint o) const { return ((ll)x - o.x + M) % M; }
    mint operator*(mint o) const { return (ll)x * o.x % M; }
    mint operator/(mint o) const { return *this * o.inv(); }

    friend mint operator+(ll a, mint b) { return mint(a) + b; }
    friend mint operator-(ll a, mint b) { return mint(a) - b; }
    friend mint operator*(ll a, mint b) { return mint(a) * b; }
    friend mint operator/(ll a, mint b) { return mint(a) / b; }

    friend ostream& operator<<(ostream &o, mint v) { return o << v.x; }
    friend istream& operator>>(istream &i, mint &v) { int t; i >> t; v = t; return i; }

    bool operator==(mint o) const { return x == o.x; }
    bool operator!=(mint o) const { return x != o.x; }

    mint pow(ll exp) const {
        mint r = 1, a = *this;
        for (; exp; exp >>= 1, a *= a)
            if (exp & 1) r *= a;
        return r;
    }
    mint inv() const { return pow(M - 2); }
};

using Z = mint<MOD>;
const int N = 3e5 + 10;
int n, m, k, c;
ll v[N], w[N], sv[N], sw[N];
vector<array<int, 2>> g[N];
map<ll, ll> dis[N];
void dij()
{
    priority_queue<array<ll, 3>, vector<array<ll, 3>>, greater<>> q;
    //dis, node, p
    q.push({0, 1, 1});
    dis[1][1] = 0;
    while(q.size())
    {
        auto [d, idx, p] = q.top();
        q.pop();
        if(dis[idx].count(p) && d != dis[idx][p]) continue;
        // cout << d << " " << idx << " " << p << "\n";
        for(int i = 1; i <= g[idx].size(); i ++)
        {
            auto [nxt, val] = g[idx][i - 1];
            if(!dis[nxt].count(i))
            {
                if(i == p)
                {
                    dis[nxt][p] = dis[idx][p] + val;
                    q.push({dis[nxt][p], nxt, p});
                }
                else if(i < p) //变小
                {
                    dis[nxt][i] = dis[idx][p] + val + sw[p] - sw[i];
                    q.push({dis[nxt][i], nxt, i});
                }
                else//变大
                {
                    dis[nxt][i] = dis[idx][p] + val + sv[i - 1] - sv[p - 1];
                    q.push({dis[nxt][i], nxt, i});
                }
            }
            else
            {
                if(i == p)
                {
                    if(dis[nxt][p] > dis[idx][p] + val)
                    {
                        dis[nxt][p] = dis[idx][p] + val;
                        q.push({dis[nxt][p], nxt, p});
                    }
                }
                else if(i < p) //变小
                {
                    if(dis[nxt][i] > dis[idx][p] + val + sw[p] - sw[i])
                    {
                        dis[nxt][i] = dis[idx][p] + val + sw[p] - sw[i];
                        q.push({dis[nxt][i], nxt, i});
                    }
                }
                else//变大
                {
                    if(dis[nxt][i] > dis[idx][p] + val + sv[i - 1] - sv[p - 1])
                    {
                        dis[nxt][i] = dis[idx][p] + val + sv[i - 1] - sv[p - 1];
                        q.push({dis[nxt][i], nxt, i});
                    }
                }
            }
        }
    }
}
void sol(int T)
{
    cin >> c;
    cin >> n >> m >> k;
    for(int i = 1; i <= k - 1; i ++)
    {
        cin >> v[i];
        sv[i] = sv[i - 1] + v[i];
    }
    for(int i = 2; i <= k; i ++)
    {
        cin >> w[i];
        sw[i] = sw[i - 1] + w[i];
    }
    for(int i = 1; i <= n; i ++)
    {
        int d;
        cin >> d;
        for(int j = 1; j <= d; j ++)
        {
            int y, z;
            cin >> y >> z;
            g[i].push_back({y, z});
        }
    }
    dij();
    for(int i = 1; i <= n; i ++)
    {
        ll res = 1e18;
        for(auto [p, v]:dis[i])
        {
            res = min(res, v);
        }
        if(res == 1e18) cout << -1 << " ";
        else cout << res << " ";
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    // cin >> t;
    for (int i = 1; i <= t; i++) sol(t);
}