Submission #411883

#TimeUsernameProblemLanguageResultExecution timeMemory
411883pliam악어의 지하 도시 (IOI11_crocodile)C++14
100 / 100
628 ms77608 KiB
#include "crocodile.h" #include <bits/stdc++.h> using namespace std; #define MAXN 100005 #define INF (ll)1e18+5 typedef long long ll; typedef pair<ll,int> pli;//(d2[x],x); //Dijkstra ll d1[MAXN],d2[MAXN]; bool used[MAXN]; vector<pair<int,ll>> adj[MAXN];//(to,weight) priority_queue<pli,vector<pli>,greater<pli>> q; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { for(int i=0;i<M;i++){ adj[R[i][0]].push_back({R[i][1],L[i]}); adj[R[i][1]].push_back({R[i][0],L[i]}); } for(int i=0;i<N;i++){ d1[i]=d2[i]=INF; used[i]=false; } for(int i=0;i<K;i++){ d1[P[i]]=d2[P[i]]=0; q.push({d2[P[i]],P[i]}); } while(!q.empty()){ int v=q.top().second; q.pop(); if(used[v]) continue; used[v]=true; for(auto p:adj[v]){ int to=p.first; ll w=p.second; if(d2[v]+w<=d1[to]){ d2[to]=d1[to]; d1[to]=d2[v]+w; }else if(d2[v]+w<d2[to]){ d2[to]=d2[v]+w; }else{ continue;//d2[to] didn't change } q.push({d2[to],to}); } } return d2[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...