제출 #1328167

#제출 시각아이디문제언어결과실행 시간메모리
1328167crispxx악어의 지하 도시 (IOI11_crocodile)C++20
0 / 100
1 ms344 KiB
#include "crocodile.h"

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const ll inf = 1e18;

int travel_plan(int n, int m, int r[][2], int l[], int k, int p[]) {
	vector<vector<array<ll, 2>>> adj(n);
	
	for(int i = 0; i < m; i++) {
		adj[r[i][0]].push_back({r[i][1], l[i]});
		adj[r[i][1]].push_back({r[i][0], l[i]});
	}
	
	priority_queue<array<ll, 2>, vector<array<ll, 2>>, greater<>> pq;
	
	vector<array<ll, 2>> d(n, {inf, inf});
	
	for(int i = 0; i < k; i++) {
		pq.push({0, p[i]});
		d[p[i]][0] = d[p[i]][1] = 0;
	}
	
	while(!pq.empty()) {
		auto [d_v, v] = pq.top();
		pq.pop();
		
		for(auto [to, c] : adj[v]) {
			ll cost = d[v][0] + c;
			
			if(d[to][1] > cost) {
				if(d[to][0] > d[to][1]) {
					d[to][0] = d[to][1];
					pq.push({d[to][0], to});
				}
				d[to][1] = cost;
			} else if(d[to][0] > cost) {
				d[to][0] = cost;
				pq.push({d[to][0], to});
			}
		}
	}
	
	return (int)d[0][0];
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...