Submission #1337857

#TimeUsernameProblemLanguageResultExecution timeMemory
1337857peanutCrocodile's Underground City (IOI11_crocodile)C++20
89 / 100
307 ms44848 KiB
#include "crocodile.h"
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using pii = pair<ll, ll>;
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
template<class X, class Y> bool maximize (X &x, const Y &y) {return x < y ? x = y, 1 : 0;}
template<class X, class Y> bool minimize (X &x, const Y &y) {return x > y ? x = y, 1 : 0;}
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;

int dist[maxn][2];
vector<pair<int, int>> adj[maxn];
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
    for (int i = 0; i < M; ++i) {
        adj[R[i][0]].pb({R[i][1], L[i]});
        adj[R[i][1]].pb({R[i][0], L[i]});
    }
    priority_queue<pair<int, int>> pq;
    memset(dist, -1, sizeof dist);
    for (int i = 0; i < K; ++i) {
        pq.push({0, P[i]});
        dist[P[i]][0] = dist[P[i]][1] = 0;
    }
    while (!pq.empty()) {
        int d = -pq.top().fi, u = pq.top().se;
//        cout << '(' << d << ", " << u << ')' << ": " << dist[u][1] << '\n';
        pq.pop();
        if (d != dist[u][1]) continue;
        for (auto v : adj[u]) {
            if (dist[v.fi][0] == -1 || dist[v.fi][0] > d + v.se) {
                dist[v.fi][1] = dist[v.fi][0];
                dist[v.fi][0] = d + v.se;
                if (dist[v.fi][1] != -1) pq.push({-dist[v.fi][1], v.fi});
            }
            else if (dist[v.fi][1] == -1 || dist[v.fi][1] > d + v.se) {
                dist[v.fi][1] = d + v.se;
                pq.push({-dist[v.fi][1], v.fi});
            }
        }

    }

    return dist[0][1];
}
//int main() {
//    int r[][2] = {{0, 2}, {0, 3}, {3, 2}, {2, 1}, {0, 1}, {0, 4}, {3, 4}};
//    int l[] = {4, 3, 2, 10, 100, 7, 9};
//    int p[] = {1, 3};
//    cout << travel_plan(5, 7, r, l, 2, p);
//}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...