제출 #1329341

#제출 시각아이디문제언어결과실행 시간메모리
1329341paronmanukyan악어의 지하 도시 (IOI11_crocodile)C++20
100 / 100
550 ms55576 KiB
#include <bits/stdc++.h>
using namespace std;

#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define ll long long
#define pii pair<ll,int>
#define V vector
#define pb push_back
#define sz(x) int(x.size())
#define rep(a,b,c,d) for(int a=b;a<=c;a+=d)

const int N = 1e5 + 5;
const ll INF = (ll)1e17;

V<pair<int,int>> adj[N];
ll bst[N], dp[N];
bool vis[N];

inline void upd(int v, ll val, priority_queue<pii, V<pii>, greater<pii>>& pq) {
	dp[v] = min(dp[v], max(bst[v], val));
	bst[v] = min(bst[v], val);
	if(dp[v] < (ll)1e9)
		pq.push({dp[v], v});
}

ll travel_plan(int n, int m, int R[][2], int L[], int k, int p[])
{
	rep(i,0,n-1,1) {
		adj[i].clear();
		bst[i] = dp[i] = INF;
		vis[i] = 0;
	}

	rep(i,0,m-1,1) {
		int x = R[i][0];
		int y = R[i][1];
		int w = L[i];
		adj[x].pb({y,w});
		adj[y].pb({x,w});
	}

	priority_queue<pii, V<pii>, greater<pii>> pq;

	rep(i,0,k-1,1) {
		int v = p[i];
		bst[v] = dp[v] = 0;
		pq.push({0LL, v});
	}

	while(!pq.empty()) {
		auto [c,u] = pq.top();
		pq.pop();

		if(vis[u]) continue;
		vis[u] = 1;

		for(auto [v,w] : adj[u]) {
			upd(v, c + w, pq);
		}
	}

	return dp[0];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...