Submission #1326587

#TimeUsernameProblemLanguageResultExecution timeMemory
1326587eri16Cyberland (APIO23_cyberland)C++20
44 / 100
27 ms8940 KiB
#include <bits/stdc++.h> #include "cyberland.h" using namespace std; vector <int> reachable(100005,0); vector<pair<int,double>> adj[100005]; void dfs(int node, int parent, int target){ if (reachable[node]==1){return;} if (node==target){return;} reachable[node]=1; for (auto [child,t] : adj[node]){ if (child!=parent){ dfs(child,node, target); } } } double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr){ priority_queue< pair<double,int>, vector<pair<double,int>>, greater<pair<double,int>> > pq; pq.push({0,H}); 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]}); } dfs(0,-1, H); vector<bool> vis(N, false); double mn=1e18;; while(!pq.empty()){ auto [d,u]=pq.top(); pq.pop(); vis[u]=true; if(u==0 || (arr[u]==0 && reachable[u]==1)){mn=min(mn,d);} for(auto [v,t] : adj[u]){ if(!vis[v]){ pq.push({d+t,v}); } } } fill(reachable.begin(), reachable.begin()+N, 0); for(int i=0; i<N; i++){ adj[i].clear(); } if (mn==1e18){return -1;} return mn; }
#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...