Submission #1292571

#TimeUsernameProblemLanguageResultExecution timeMemory
1292571Hamed_Ghaffari사이버랜드 (APIO23_cyberland)C++20
44 / 100
345 ms11884 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; using pii = pair<int, int>; #define X first #define Y second #define mins(a, b) (a = min(a, b)) const int MXN = 1e5+5; const double inf = 1e16; int h; vector<pii> g[MXN]; double dis[MXN], dis2[MXN]; bool vis[MXN]; void dfs(int v) { vis[v] = 1; for(auto [u, w] : g[v]) if(!vis[u] && u!=h) dfs(u); } double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { ::h = h; for(int i=0; i<n; i++) { dis[i] = i ? inf : 0; g[i].clear(); vis[i] = 0; } for(int i=0; i<m; i++) { g[x[i]].push_back({y[i], c[i]}); g[y[i]].push_back({x[i], c[i]}); } dfs(0); for(int i=0; i<n; i++) if(vis[i] && !arr[i]) dis[i] = 0; double ans = inf; for(int x=min(70, k); x>=0; x--) { priority_queue<pair<double, int>> pq; for(int i=0; i<n; i++) vis[i] = 0, pq.push({-dis[i], i}); while(!pq.empty()) { double d = -pq.top().X; int v = pq.top().Y; pq.pop(); if(vis[v]) continue; vis[v] = 1; for(auto [u, w] : g[v]) if(u!=h && dis[u] > dis[v]+w) pq.push({-(dis[u] = dis[v]+w), u}); } for(int v=0; v<n; v++) { dis2[v] = inf; for(auto [u, w] : g[v]) if(arr[u]==2 && dis[u] < inf/2) mins(dis2[v], dis[v] / 2 + w); } double res = x ? dis2[h] : inf; for(auto [u, w] : g[h]) mins(res, dis[u]+w); for(int i=0; i<n; i++) dis[i] = i==h ? inf : dis2[i]; mins(ans, res); } return ans < inf/2 ? ans : -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...