Submission #1138480

#TimeUsernameProblemLanguageResultExecution timeMemory
1138480kitkat12Crocodile's Underground City (IOI11_crocodile)C++20
46 / 100
24 ms580 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define debug(x) std::cout << #x << ": " << x << "\n"
#define all(v) v.begin(), v.end()
#define li(i,a,b) for (int (i) = (a); (i) < (b); (i)++)
#define endl '\n'
#define mem(name,val) memset(name,val,sizeof(name))
#define min(a,b) (a<=b ? a : b)
#define max(a,b) (a>=b ? a : b)
//using u64 = uint64_t;
//using u128 = __uint128_t;

int travel_plan(int n, int m, int (*r)[2], int *l, int k, int *p){
    const ll inf = 1e18;
    vector<pair<int,ll>> adj[n];
    vector<bool> end(n,0);
    vector<ll> val(n,0);
    li(i,0,m){
        adj[r[i][0]].pb({r[i][1],l[i]});
        adj[r[i][1]].pb({r[i][0],l[i]});
    }
    li(i,0,k)end[p[i]]=1;
    li(_,0,5*n){
        li(i,0,n){
            ll b=inf,sb=inf;
            for(auto u : adj[i]){
                if(!end[u.F]) continue;
                ll v = val[u.F] + u.S;
                if(v<=b){
                    sb=b;
                    b=v;
                }
                else if (v < sb){
                    sb=v;
                }
            }
            if(sb!=inf){
                val[i]=sb;
                end[i]=1;
            }
        }
    }
    return val[0];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...