제출 #1181054

#제출 시각아이디문제언어결과실행 시간메모리
1181054Muhammet사이버랜드 (APIO23_cyberland)C++17
97 / 100
3097 ms40304 KiB
#include "bits/stdc++.h" #include "cyberland.h" // #include "stub.cpp" using namespace std; #define ff first #define ss second const long long INF = 1e16 + 6; vector <vector <pair <int, int>>> v; double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> a) { double ans = INF; k = min(k, 70); v.clear(); v.resize(n+1); for(int i = 0; i < m; i++) { v[x[i]].push_back({y[i], c[i]}); v[y[i]].push_back({x[i], c[i]}); } vector <vector <double>> dis(n+1, vector <double> (k+1, INF)); priority_queue <pair <double, int>> q, q1; dis[0][0] = 0; q.push({0, 0}); for(int k1 = 0; k1 <= k; k1++) { while(!q.empty()) { double ds = -q.top().ff; int i = q.top().ss; q.pop(); if(i == h or dis[i][k1] != ds) continue; for(auto [j, w] : v[i]) { double dss = ds + w; if(dis[j][k1] > dss) { dis[j][k1] = dss; q.push({-dss, j}); } if(a[j] == 0 and dis[j][k1] != 0) { dis[j][k1] = 0; q.push({0, j}); } if(a[j] == 2 and k1 < k) { dss /= 2; if(dis[j][k1+1] > dss) { dis[j][k1+1] = dss; q1.push({-dss, j}); } } } } q = q1; } for(int i = 0; i <= k; i++) { ans = min(ans, dis[h][i]); } return (ans == INF ? -1 : ans); }
#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...