Submission #1168538

#TimeUsernameProblemLanguageResultExecution timeMemory
1168538rayan_bdCyberland (APIO23_cyberland)C++20
21 / 100
39 ms10568 KiB
#include <bits/stdc++.h> using namespace std; const double INF = 5e18; const int mxN = 2e5+100; #define fi first #define se second #define all(v) v.begin(), v.end() bool can_vis[mxN]; double dist[mxN]; vector<pair<int,double>> adj[mxN]; void dfs(int u,int H){ if(u==H) return; can_vis[u]=1; for(auto it:adj[u]){ if(!can_vis[it.fi]) dfs(it.fi,H); } } double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr){ for(int i=0;i<=N;++i) adj[i].clear(),dist[i]=INF,can_vis[i]=0; for(int i=0;i<M;++i){ adj[x[i]].push_back({y[i],(double)c[i]}); adj[y[i]].push_back({x[i],(double)c[i]}); } dfs(0,H); priority_queue<pair<double,int>,vector<pair<double,int>>,greater<pair<double,int>>> pq; for(int i=0;i<N;++i){ if(arr[i]==0&&can_vis[i]){ pq.push({0,i}),dist[i]=0; } } while(pq.size()){ auto tp=pq.top(); // dist,node pq.pop(); if(tp.se==H) break; if(dist[tp.se]<tp.fi) continue; for(auto it:adj[tp.se]){ if(dist[it.fi]>tp.fi+it.se){ dist[it.fi]=tp.fi+it.se; pq.push({dist[it.fi],it.fi}); } } } double prv=dist[H]; for(int i=0;i<N;++i) dist[i]=INF; dist[0]=0; pq.push({0,0}); while(pq.size()){ auto tp=pq.top(); // dist,node pq.pop(); if(tp.se==H) break; if(dist[tp.se]<tp.fi) continue; for(auto it:adj[tp.se]){ if(dist[it.fi]>tp.fi+it.se){ dist[it.fi]=tp.fi+it.se; pq.push({dist[it.fi],it.fi}); } } } return (double)(min(prv,dist[H])); }
#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...