Submission #1112805

#TimeUsernameProblemLanguageResultExecution timeMemory
1112805mariaclaraCyberland (APIO23_cyberland)C++17
100 / 100
1786 ms90928 KiB
#include "cyberland.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef tuple<int,double,int> trio; const int MAXN = 2e5 + 5; #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() #define mk make_pair #define pb push_back #define fr first #define sc second double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { vector<double> dist[105]; vector<vector<pii>> edges(N); vector<bool> vis(N); K = min(K, 100); for(int i = 0; i <= K; i++) dist[i].resize(N, 1e18); for(int i = 0; i < M; i++) { edges[x[i]].pb({y[i], c[i]}); edges[y[i]].pb({x[i], c[i]}); } priority_queue<trio> pq; pq.push({K, 0, 0}); queue<int> fila; fila.push(0); while(!fila.empty()) { int x = fila.front(); fila.pop(); if(x == H) continue; if(arr[x] == 0) pq.push({K, 0, x}); for(auto [viz, peso] : edges[x]) if(!vis[viz]) fila.push(viz), vis[viz] = 1; } for(int i = 0; i < N; i++) vis[i] = 0; while(!pq.empty()) { auto [k, D, at] = pq.top(); pq.pop(); D *= -1; if(arr[at] == 0) D = 0; if(dist[k][at] < D) continue; if(at == H) continue; for(auto [viz, peso] : edges[at]) { if(D + peso < dist[k][viz]) pq.push({k, - D - peso, viz}), dist[k][viz] = D + peso; if(k >= 1 and arr[at] == 2 and D/2 + peso < dist[k-1][viz]) pq.push({k-1, -D/2 -peso, viz}), dist[k-1][viz] = D/2 + peso; } } double ans = 1e18; for(int i = 0; i <= K; i++) ans = min(ans, dist[i][H]); if(ans == 1e18) return -1; return 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...