Submission #968518

# Submission time Handle Problem Language Result Execution time Memory
968518 2024-04-23T14:17:51 Z saayan007 Cyberland (APIO23_cyberland) C++17
44 / 100
1620 ms 2097152 KB
#include "bits/stdc++.h"
#include "cyberland.h"
using namespace std;
 
#include <vector>
 
/* void bfs(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr, vector<pair<int, double>> adj[], double dist[]) { */

/* } */

double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {
    vector<pair<int, double>> adj[N];
    for(int i = 0; i < M; ++i) {
        adj[x[i]].emplace_back(y[i], c[i]);
        adj[y[i]].emplace_back(x[i], c[i]);
    }
 
    double dist[N][K];
    for(int i = 0; i < N; ++i) {
        for(int j = 0; j < K; ++j) {
            dist[i][j] = -1;
        }
    }
 
    if(1) { // BFS starts
        bool vis[N] = {};
        queue<int> qu;
        vis[0] = 1;
        qu.push(0);
        dist[0][0] = 0;

        while(!qu.empty()) {
            int a = qu.front();
            qu.pop();
            if(a == H) continue;
            for(auto [b, w] : adj[a]) {
                if(vis[b]) continue;
                vis[b] = 1;
                qu.push(b);
                if(arr[b] == 0) dist[b][0] = 0;
            }
        }
    } // BFS ends
 
    priority_queue<pair<double, pair<int, int>>> pq;
    for(int i = 0; i < N; ++i) {
        if(dist[i][0] == 0) {
            pq.push({-dist[i][0], {-(double)0, i}});
        }
    }
 
    while(!pq.empty()) {
        int a = pq.top().second.second;
        int st = pq.top().second.first;
        double d = -pq.top().first;
        pq.pop();
        if(dist[a][st] < d || a == H) {
            continue;
        }
 
        for(auto [b, w] : adj[a]) {
            if(dist[b][st] == -1 || d + w < dist[b][st]) {
                dist[b][st] = d + w;
                pq.push({-dist[b][st], {-st, b}});
            }
            if(arr[b] == 2 && st < K - 1) {
                ++st;
                if(dist[b][st] == -1 || (d + w) / 2 < dist[b][st]) {
                    dist[b][st] = (d + w) / 2;
                    pq.push({-dist[b][st], {-st, b}});
                }
            }
        }
    }
 
    double ans = -1;
    for(int i = 0; i < K; ++i) {
        if(ans == -1 || (dist[H][i] != -1 && ans > dist[H][i]))
            ans = dist[H][i];
    }
    return ans;
}
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 344 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 21 ms 600 KB Correct.
2 Correct 25 ms 604 KB Correct.
3 Correct 23 ms 604 KB Correct.
4 Correct 25 ms 600 KB Correct.
5 Correct 25 ms 804 KB Correct.
6 Correct 22 ms 3820 KB Correct.
7 Correct 28 ms 3672 KB Correct.
8 Correct 16 ms 7004 KB Correct.
9 Correct 22 ms 348 KB Correct.
10 Correct 21 ms 348 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 26 ms 600 KB Correct.
2 Correct 25 ms 816 KB Correct.
3 Correct 24 ms 860 KB Correct.
4 Correct 29 ms 760 KB Correct.
5 Correct 24 ms 600 KB Correct.
6 Correct 6 ms 3416 KB Correct.
# Verdict Execution time Memory Grader output
1 Incorrect 35 ms 20308 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 21 ms 860 KB Correct.
2 Correct 24 ms 604 KB Correct.
3 Correct 23 ms 600 KB Correct.
4 Correct 27 ms 3676 KB Correct.
5 Correct 19 ms 348 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 23 ms 604 KB Correct.
2 Correct 24 ms 852 KB Correct.
3 Correct 56 ms 26452 KB Correct.
4 Correct 15 ms 2908 KB Correct.
5 Correct 22 ms 348 KB Correct.
6 Correct 22 ms 604 KB Correct.
# Verdict Execution time Memory Grader output
1 Incorrect 28 ms 916 KB Wrong Answer.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1620 ms 2097152 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -