Submission #970354

#TimeUsernameProblemLanguageResultExecution timeMemory
970354antonCyberland (APIO23_cyberland)C++17
44 / 100
33 ms11756 KiB
#include "cyberland.h"
#include<bits/stdc++.h>

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

void find_resets(int u, vector<bool>& vis, vector<vector<pii>>& adj, vector<int>& resets, vector<signed>& arr){
    vis[u] = true;
    if(arr[u] == 0){
        resets.push_back(u);
    }
    for(auto e: adj[u]){
        if(!vis[e.first]){
            find_resets(e.first, vis, adj, resets, arr);
        }
    }
}

int find_closest(vector<vector<pii>>& adj, vector<int>& resets, int h){
    priority_queue<pii> pq;
        vector<int> dist(adj.size(), 1e18);

    for(auto e: resets){
        pq.push({0, e});

        dist[e] = 0;
    }


    while(pq.size()>0){
        auto curid = pq.top().second;
        int curdist=  -pq.top().first;
        pq.pop();
        if(curdist == dist[curid]){
            for(auto e: adj[curid]){
                int ndist = curdist + e.second;
                if(ndist<dist[e.first]){
                    dist[e.first] = ndist;
                    pq.push({-ndist, e.first});
                }
            }
        }
    }

    if(dist[h] == 1e18){
        return -1;
    }
    else{
        return dist[h];
    }
}

double solve(signed N, signed M, signed K, signed H, std::vector<signed> x, std::vector<signed> y, std::vector<signed> c, std::vector<signed> arr) {
    vector<vector<pii>> adj(N);
    for(int i = 0; i<M; i++){
        adj[x[i]].push_back({y[i], c[i]});
        adj[y[i]].push_back({x[i], c[i]});
    }
    vector<int> res(N);
    vector<bool> vis(N);
    vis[H] = true;
    vector<int> resets;
    arr[0] = 0;
    find_resets(0, vis, adj, resets, arr);
    return (double)(find_closest(adj, resets, H));
    
    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...