Submission #799016

#TimeUsernameProblemLanguageResultExecution timeMemory
799016M7kraCyberland (APIO23_cyberland)C++17
8 / 100
28 ms7344 KiB
#include "cyberland.h"
#include <iostream>
#include <queue>
using namespace std;

typedef pair<int, int> pii;
typedef pair<double, int> pdd;
double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) {
    
    vector<vector<pii>> adjacent(N);
    for (int i = 0; i < M; i++) {
        adjacent[x[i]].push_back({y[i], c[i]});
        adjacent[y[i]].push_back({x[i], c[i]});
    }

    priority_queue<pdd, vector<pdd>, greater<pdd>> pq;

    queue<int> q;
    vector<bool> visited(N);
    vector<bool> visited2(N);
    q.push(0);
    visited[0] = true;
    arr[0] = 0;
    while (!q.empty()) {
        int vertex = q.front();
        q.pop();
    
        if (arr[vertex] == 0) {
            pq.push({0, vertex});
            visited2[vertex] = true;
        }
        for (pii v : adjacent[vertex]) {
            if (visited[v.first]) continue;
            visited[v.first] = true;
            q.push(v.first);
        }
    }

    while (!pq.empty()) {
        pdd vertex = pq.top();
        pq.pop();

        if (vertex.second == H) return vertex.first;
        for (pdd v : adjacent[vertex.second]) {
            if (visited2[v.first]) continue;
            visited2[v.first] = true;
            pq.push({vertex.first + v.second, v.first});
        }
    }
    return -1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...