Submission #1352217

#TimeUsernameProblemLanguageResultExecution timeMemory
1352217s101gCrocodile's Underground City (IOI11_crocodile)C++20
46 / 100
1 ms580 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, int>;
const ll inf = 2e+18;
ll travel_plan(int n, int m, int r[][2], int l[], int k, int p[])
{
    vector<pair<int, int>> adj[n];
    for (int i = 0; i < m; i++)
        adj[r[i][0]].push_back({r[i][1], l[i]}), adj[r[i][1]].push_back({r[i][0], l[i]});
    vector<vector<ll>> d(n, vector<ll>(2, inf));
    priority_queue<pii, vector<pii>, greater<pii>> pq;
    for (int i = 0; i < k; i++)
        pq.push({0, p[i]}), d[p[i]][0] = 0;
    while (!pq.empty())
    {
        auto t = pq.top();
        pq.pop();
        ll dd = t.first, cur = t.second;
        if (d[cur][1] < dd)
            continue;
        for (auto u : adj[cur])
        {
            ll to = u.first, w = u.second, v = dd + w;
            if (v < d[to][0])
            {
                d[to][1] = d[to][0], d[to][0] = v;
                if (d[to][1] != inf)
                    pq.push({d[to][1], to});
            }
            else if (v < d[to][1])
            {
                d[to][1] = v;
                pq.push({d[to][1], to});
            }
        }
    }
    return d[0][1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...