Submission #806717

# Submission time Handle Problem Language Result Execution time Memory
806717 2023-08-04T09:09:56 Z TheSahib Cyberland (APIO23_cyberland) C++17
68 / 100
3000 ms 91624 KB
#include "cyberland.h"
#include <bits/stdc++.h>

#define ll long long
#define pii pair<int, char>
using namespace std;

const ll oo = 1e18;
const int MAX = 1e5 + 5;

struct edge{
    int u, c;
};

int n, k, f;
int A[MAX];
vector<edge> g[MAX];
bool visited[MAX];

vector<int> starts;
void dfs(int node){
    visited[node] = 1;
    for(auto& e:g[node]){
        if(visited[e.u]) continue;
        dfs(e.u);
    }
}

double dist[MAX][32];
bool comp(pii a, pii b){
    return dist[a.first][a.second] <= dist[b.first][b.second];
}

void dijkstra(){
    set<pii, decltype(&comp)> st(&comp);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= k; j++)
        {
            dist[i][j] = oo;
        }
    }
    
    for(int a:starts){
        dist[a][k] = 0;
        st.insert({a, k});
    }
    while(!st.empty()){
        
        int node = st.begin()->first;
        int l = st.begin()->second;
        double d = dist[node][l];
        st.erase(st.begin());


        for(auto& e:g[node]){
            double b = d + e.c;
            
            if(b < dist[e.u][l]){
                st.erase({e.u, l});
                dist[e.u][l] = b;
                st.insert({e.u, l});
            }
            if(l == 0 || A[e.u] != 2) continue;
            if(b / 2 < dist[e.u][l - 1]){
                st.erase({e.u, l - 1});
                dist[e.u][l - 1] = b / 2;
                st.insert({e.u, l - 1});
            }
        }
    }
}


double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {
    n = N;
    k = K;
    f = H;
    starts.clear();
    for (int i = 0; i < n; i++)
    {
        A[i] = arr[i];
        g[i].clear();
        visited[i] = 0;
    }
    
    for (int i = 0; i < M; i++)
    {
        g[x[i]].push_back({y[i], c[i]});
        g[y[i]].push_back({x[i], c[i]});
    }
    g[f].clear();
    dfs(0);
    starts.push_back(0);
    for (int i = 0; i < n; i++)
    {
        if(visited[i] && A[i] == 0){
            starts.push_back(i);
        }
    }
    dijkstra();
    double ans = oo;
    for(int i = 0; i <= k; ++i){
        ans = min(ans, dist[f][i]);
    }
    if(ans == oo){
        return -1;
    }
    else{
        return ans;
    }
}

Compilation message

cyberland.cpp: In function 'bool comp(std::pair<int, char>, std::pair<int, char>)':
cyberland.cpp:31:28: warning: array subscript has type 'char' [-Wchar-subscripts]
   31 |     return dist[a.first][a.second] <= dist[b.first][b.second];
      |                          ~~^~~~~~
cyberland.cpp:31:55: warning: array subscript has type 'char' [-Wchar-subscripts]
   31 |     return dist[a.first][a.second] <= dist[b.first][b.second];
      |                                                     ~~^~~~~~
# Verdict Execution time Memory Grader output
1 Correct 24 ms 2772 KB Correct.
2 Correct 20 ms 2772 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 23 ms 3028 KB Correct.
2 Correct 29 ms 3044 KB Correct.
3 Correct 27 ms 2968 KB Correct.
4 Correct 31 ms 3124 KB Correct.
5 Correct 28 ms 3084 KB Correct.
6 Correct 26 ms 5832 KB Correct.
7 Correct 33 ms 5844 KB Correct.
8 Correct 17 ms 9044 KB Correct.
9 Correct 24 ms 2760 KB Correct.
10 Correct 24 ms 2748 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 33 ms 3028 KB Correct.
2 Correct 29 ms 3028 KB Correct.
3 Correct 27 ms 3112 KB Correct.
4 Correct 30 ms 2756 KB Correct.
5 Correct 28 ms 2644 KB Correct.
6 Correct 8 ms 5460 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 483 ms 28596 KB Correct.
2 Correct 531 ms 3452 KB Correct.
3 Correct 470 ms 3472 KB Correct.
4 Correct 491 ms 3436 KB Correct.
5 Correct 386 ms 2860 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 21 ms 3080 KB Correct.
2 Correct 24 ms 3112 KB Correct.
3 Correct 24 ms 3084 KB Correct.
4 Correct 25 ms 6000 KB Correct.
5 Correct 20 ms 2744 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 25 ms 3132 KB Correct.
2 Correct 20 ms 3156 KB Correct.
3 Correct 41 ms 27072 KB Correct.
4 Correct 17 ms 5204 KB Correct.
5 Correct 28 ms 2644 KB Correct.
6 Correct 22 ms 3132 KB Correct.
# Verdict Execution time Memory Grader output
1 Correct 559 ms 4204 KB Correct.
2 Correct 82 ms 5196 KB Correct.
3 Correct 1585 ms 37328 KB Correct.
4 Correct 1116 ms 10732 KB Correct.
5 Execution timed out 3033 ms 91624 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 3067 ms 17668 KB Time limit exceeded
2 Halted 0 ms 0 KB -