Submission #1184318

#TimeUsernameProblemLanguageResultExecution timeMemory
1184318thinknoexitCrocodile's Underground City (IOI11_crocodile)C++20
100 / 100
250 ms46992 KiB
#include "crocodile.h"
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 100100;
struct A {
    int v, w;
    bool operator < (const A& o) const {
        return w > o.w;
    }
};
priority_queue<A> pq;
vector<A> adj[N];
int dis[2][N];
bool vis[N];
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]].push_back({ R[i][1], L[i] });
        adj[R[i][1]].push_back({ R[i][0], L[i] });
    }
    memset(dis, 0x3f, sizeof dis);
    for (int i = 0;i < K;i++) {
        dis[0][P[i]] = dis[1][P[i]] = 0;
        pq.push({ P[i], 0 });
    }
    while (!pq.empty()) {
        auto x = pq.top();
        pq.pop();
        int v = x.v, w = x.w;
        if (vis[v]) continue;
        vis[v] = 1;
        for (auto& x : adj[v]) {
            if (w + x.w < dis[0][x.v]) {
                dis[1][x.v] = dis[0][x.v];
                dis[0][x.v] = w + x.w;
                pq.push({ x.v, dis[1][x.v] });
            }
            else if (w + x.w < dis[1][x.v]) {
                dis[1][x.v] = w + x.w;
                pq.push({ x.v, dis[1][x.v] });
            }
        }
    }
    return dis[1][0];
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...