Submission #1030671

#TimeUsernameProblemLanguageResultExecution timeMemory
1030671amine_arouaCyberland (APIO23_cyberland)C++17
8 / 100
796 ms2097152 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; 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<pair<long long ,long long>>> adj(N); for(long long i = 0 ; i < M ; i++) { adj[x[i]].push_back({y[i] , c[i]}); adj[y[i]].push_back({x[i] , c[i]}); } priority_queue<pair<double , pair<long long ,long long>> , vector<pair<double , pair<long long ,long long>>> , greater<pair<double , pair<long long ,long long>>>> pq; vector<vector<double>> dist(K + 1 , vector<double>(N , 1e16)); vector<vector<bool>> vis(K + 1 , vector<bool>(N , 0)); dist[K][0] = 0; pq.push({0 , {K , 0}}); while(!pq.empty()) { auto tp = pq.top(); pq.pop(); double d = tp.first ; long long node = tp.second.second , k = tp.second.first; if(vis[k][node]) continue; vis[k][node] = 1; for(auto [u , cost] : adj[node]) { double nd = d + cost; if(arr[u] == 0) { nd = 0; } if(nd < dist[k][u]) { dist[k][u] = nd; pq.push({nd , {k , u}}); } if(arr[u] == 2 && k >= 1) { nd/=2.0; if(nd < dist[k][u]) { dist[k - 1][u] = nd; pq.push({nd , {k - 1 , u}}); } } } } double mn = 1e16; for(long long i = 0 ; i <= K ; i++) { mn= min(mn , dist[i][H]); } return mn; }
#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...