Submission #1269916

#TimeUsernameProblemLanguageResultExecution timeMemory
1269916FaggiCyberland (APIO23_cyberland)C++20
44 / 100
28 ms10056 KiB
#include <bits/stdc++.h> #define ll long long #define sz(x) int(x.size()) #define all(x) x.begin(),x.end() #define fr first #define se second #define pb push_back #define mp make_pair using namespace std; const int MAXN=1e5+1; vector<pair<ll,ll>>grafo[MAXN]; ll n, h, m, k; bool vis[MAXN]; vector<int>ar; ll dijkstra() { priority_queue<pair<ll,ll>>pq; vector<ll>proc(n,0); vector<ll>dist(n,LLONG_MAX); dist[h]=0; pq.push({0,h}); while(pq.size()) { ll nod=pq.top().se; pq.pop(); if(proc[nod]) continue; proc[nod]=1; for(auto k:grafo[nod]) { if(dist[nod]+k.se<dist[k.fr]) { dist[k.fr]=dist[nod]+k.se; pq.push({-dist[k.fr],k.fr}); } } } ll mi=dist[0]; for(ll i=1; i<n; i++) if(!ar[i]&&vis[i]&&i!=h) mi=min(mi,dist[i]); return mi; } void dfs(ll nod) { vis[nod]=1; if(nod==h) return; for(auto k:grafo[nod]) { if(!vis[k.fr]) dfs(k.fr); } } double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) { ar=arr; memset(vis,0,sizeof(vis)); ll i; n=N; m=M; k=K; h=H; for(i=0; i<n; i++) grafo[i].resize(0); for(i=0; i<M; i++) { grafo[x[i]].pb({y[i],c[i]}); grafo[y[i]].pb({x[i],c[i]}); } dfs(0); ll res=dijkstra(); if(res==LLONG_MAX) return double(-1); return double(res); }
#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...