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...