Submission #1331439

#TimeUsernameProblemLanguageResultExecution timeMemory
1331439Mamikonm1Crocodile's Underground City (IOI11_crocodile)C++17
89 / 100
234 ms47568 KiB
#include<bits/stdc++.h>
//#include "crocodile.h"
using namespace std;
using ll = long long;
const int n=1e5+5;
const ll inf=1e18;
struct cost{
    ll mn1,mn2;
    cost(ll a=inf,ll b=inf){
        mn1=a;
        mn2=b;
    }
    void add(ll x){
        if(mn1>=x){
            mn2=mn1;
            mn1=x;
        }
        else if(mn2>=x)mn2=x;
    }
    bool operator<(const cost b) const{
        if(mn2==b.mn2)return mn1<b.mn1;
        return mn2<b.mn2;
    }
};
vector<cost>dp(n);
vector<pair<int,int>>graph[n];
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
    int u,v;
    for(int i=0;i<M;++i){
        u=R[i][0];v=R[i][1];
        graph[u].push_back({v,L[i]});
        graph[v].push_back({u,L[i]});
    }
    priority_queue<pair<cost,int>,vector<pair<cost,int>>,greater<pair<cost,int>>>q;
    for(int i=0;i<K;++i){
        u=P[i];
        dp[u]={0,0};
        q.push({dp[u],u});
    }
    bool vis[n+1];
    ll w;
    while(!q.empty()){
        u=q.top().second;
        w=q.top().first.mn2;
        q.pop();
        if(vis[u])continue;
        vis[u]=1;
        for(auto&i:graph[u]){
            v=i.first;
            cost cur=dp[v];
            cur.add(i.second+w);
            if(cur<dp[v]){
                dp[v]=cur;
                q.push({dp[v],v});
            }
        }
    }
    return dp[0].mn2;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...