Submission #1349682

#TimeUsernameProblemLanguageResultExecution timeMemory
1349682mydknCrocodile's Underground City (IOI11_crocodile)C++17
100 / 100
228 ms46964 KiB
#include "crocodile.h"
#include <bits/stdc++.h>

using namespace std;

#define pii pair<int, int>
#define F first
#define S second
#define emb emplace_back
#define em emplace

const int maxn = 1e5 + 5;
const int inf = 2e9;

vector<pii> adj[maxn];
priority_queue<pii, vector<pii>, greater<pii>> pq;
bool vis[maxn];
int df[maxn], ds[maxn];

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], v = r[i][1], w = l[i];
		adj[u].emb(w, v);
		adj[v].emb(w, u);
	}
	fill(df, df+n, inf);
	fill(ds, ds+n, inf);
	for(int i=0;i<k;++i){
		int u = p[i];
		pq.em(0, u);
		df[u] = 0;
	}
	while(!pq.empty()){
		auto [w, u] = pq.top();
		pq.pop();
		if(vis[u]) continue;
		vis[u] = 1;
		if(w != inf){
			for(auto [vw, v] : adj[u]){
				if(ds[v] > w + vw && !vis[v]){
					ds[v] = min(ds[v], w + vw);
					if(ds[v] < df[v]) swap(df[v], ds[v]);
					pq.em(ds[v], v);
				}
			}
		}
	}
	return ds[0];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...