| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1283545 | Faisal_Saqib | Crocodile's Underground City (IOI11_crocodile) | C++20 | 0 ms | 0 KiB |
#include "crocodile.h"
#include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int QK=1e5+100,inf=1e9;
int n,k;
ll dist[QK],sp[QK];
ll dp[QK][5];
bool vis[QK];
vector<pair<int,int>> adj[QK];
void dykstra(){
for(int i=0;i<=n;i++)
{
dp[i][0]=inf;
dp[i][1]=inf;
dist[i]=inf;
}
priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>> pq;
for(int j=0;j<k;j++){
dist[sp[j]]=0;
dp[sp[j]][0]=dp[sp[j]][1]=0;
pq.push({0,sp[j]});
}
while(!pq.empty()){
auto [d,u]=pq.top();pq.pop();
if(d!=dp[u][1])continue; // not equal to second minimum
for(auto [v,w]:adj[u]){
ll nd=dp[u][1]+w;
if(nd<dp[v][0])
{
dp[v][1]=dp[v][0]; // we have already push for (dp[v][0],v) (dp[v][1],v)
dp[v][0]=nd;
// pq.push({nd,v});
pq.push({dp[v][1],v}); // maybe already vis
}
else if(nd<dp[v][1])
{
dp[v][1]=nd;
pq.push({nd,v});
}
}
}
}
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
n=N,k=K;
for(int i=0;i<K;i++)
sp[i]=P[i];
// sort(sp,sp+K);
for(int i=0;i<M;i++){
int u=R[i][0],v=R[i][1],l=L[i];
adj[u].push_back({v,l});
adj[v].push_back({u,l});
}
dykstra();
// calculate();
return dp[0][1];
}
