제출 #1030850

#제출 시각아이디문제언어결과실행 시간메모리
1030850amine_aroua사이버랜드 (APIO23_cyberland)C++17
44 / 100
70 ms35156 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; void dfs(int x , vector<bool>&reach , vector<vector<pair<int ,int>>> &adj , int H) { if(reach[x]) return ; reach[x] = 1; for(auto [u , cost] : adj[x]) { if(u != H) dfs(u , reach , adj , H); } } using Node = tuple<double , int , int>; priority_queue<Node , vector<Node> , greater<Node>> pq; void upd(int x , int k , double d , vector<vector<double>> &dist) { if(dist[x][k] > d) { dist[x][k] = d; pq.push({d , x , k}); } } 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) { pq = priority_queue<Node , vector<Node> , greater<Node>> (); K = min(K , 70); vector<vector<pair<int , int>>> adj(N); vector<bool> reach(N); vector<double> pwr(K + 1); pwr[0] = 1; for(int i = 1 ; i <= K ; i++) { pwr[i] = pwr[i - 1]/2.0; } 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<vector<double>> dist(N , vector<double>(K + 1 , 1e16)); arr[0] = 0; pq.push({0 , H , K}); dist[H][K] = 0; dfs(0 , reach ,adj ,H); vector<vector<bool>> vis(N , vector<bool>(K + 1)); while(!pq.empty()) { auto [d , x , k] = pq.top(); pq.pop(); if(vis[x][k]) continue; vis[x][k] = true; if(arr[x] == 0) { return d; } for(auto [u , cost] : adj[x]) { if(!reach[u]) continue; upd(u , k , cost*pwr[K - k] + d , dist); if(arr[u] == 2 && k > 0) { int p = k - 1; upd(u , p , cost*pwr[K - p] + d , dist); } } } 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...