Submission #306074

#TimeUsernameProblemLanguageResultExecution timeMemory
306074vipghn2003Crocodile's Underground City (IOI11_crocodile)C++14
100 / 100
742 ms47852 KiB
#include<bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair using namespace std; const int N=1e5+5; long long d[N][2]; vector<pii>adj[N]; int travel_plan(int N,int M,int R[][2],int L[],int K,int P[]) { for(int i=0;i<M;i++) { int u=R[i][0]; int v=R[i][1]; int w=L[i]; adj[u].push_back(mp(v,w)); adj[v].push_back(mp(u,w)); } priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>>pq; for(int i=0;i<N;i++) d[i][0]=d[i][1]=1e18; for(int i=0;i<K;i++) { d[P[i]][0]=d[P[i]][1]=0; pq.push(mp(0,P[i])); } while(!pq.empty()) { int u=pq.top().se; long long dist=pq.top().fi; pq.pop(); if(d[u][1]!=dist) continue; for(auto&v:adj[u]) { long long ndist=dist+v.se; if(d[v.fi][0]>=ndist) { int pre=d[v.fi][1]; d[v.fi][1]=d[v.fi][0]; d[v.fi][0]=ndist; if(d[v.fi][1]!=pre&&d[v.fi][1]!=1e18) pq.push(mp(d[v.fi][1],v.fi)); } else if(d[v.fi][1]>ndist) { d[v.fi][1]=ndist; pq.push(mp(d[v.fi][1],v.fi)); } } } return d[0][1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...