답안 #106292

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
106292 2019-04-17T19:26:22 Z tincamatei 악어의 지하 도시 (IOI11_crocodile) C++14
89 / 100
850 ms 47344 KB
#include "crocodile.h"
#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 100000;
const int INF = 1000000001;

vector<pair<int, int> > graph[MAX_N];
int dp[MAX_N];
int best[MAX_N][2];

void dijkstra(int N, int K, int P[]) {
	priority_queue<pair<int, int> > pq;

	for(int i = 0; i < K; ++i) {
		dp[P[i]] = 0;
		best[P[i]][0] = best[P[i]][1] = 0;
		pq.push(make_pair(0, P[i]));
	}

	for(int i = 0; i < N; ++i)
		pq.push(make_pair(-INF - 1, i));

	while(!pq.empty()) {
		int nod = pq.top().second;
		int cost = -pq.top().first;

		pq.pop();

		if(best[nod][1] == cost) {
			dp[nod] = cost;
			for(auto it: graph[nod]) {
				int cost2 = cost + it.second;
				if(cost2 < best[it.first][0]) {
					best[it.first][1] = best[it.first][0];
					best[it.first][0] = cost2;

					pq.push({-best[it.first][1], it.first});
				} else if(cost2 < best[it.first][1]) {
					best[it.first][1] = cost2;

					pq.push({-cost2, it.first});
				}
			}
		}
	}
}

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
  for(int i = 0; i < M; ++i) {
		graph[R[i][0]].push_back(make_pair(R[i][1], L[i]));
		graph[R[i][1]].push_back(make_pair(R[i][0], L[i]));
	}
	for(int i = 0; i < N; ++i) {
		best[i][0] = INF;
		best[i][1] = INF + 1;
		dp[i] = INF;
	}
	
	dijkstra(N, K, P);
	return dp[0];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Correct 4 ms 2688 KB Output is correct
3 Correct 4 ms 2688 KB Output is correct
4 Correct 5 ms 2816 KB Output is correct
5 Correct 6 ms 2816 KB Output is correct
6 Correct 4 ms 2816 KB Output is correct
7 Correct 5 ms 2816 KB Output is correct
8 Correct 5 ms 2816 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Correct 4 ms 2688 KB Output is correct
3 Correct 4 ms 2688 KB Output is correct
4 Correct 5 ms 2816 KB Output is correct
5 Correct 6 ms 2816 KB Output is correct
6 Correct 4 ms 2816 KB Output is correct
7 Correct 5 ms 2816 KB Output is correct
8 Correct 5 ms 2816 KB Output is correct
9 Correct 6 ms 2944 KB Output is correct
10 Correct 4 ms 2688 KB Output is correct
11 Correct 6 ms 2816 KB Output is correct
12 Correct 8 ms 3072 KB Output is correct
13 Correct 8 ms 3200 KB Output is correct
14 Correct 4 ms 2688 KB Output is correct
15 Correct 6 ms 2816 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Correct 4 ms 2688 KB Output is correct
3 Correct 4 ms 2688 KB Output is correct
4 Correct 5 ms 2816 KB Output is correct
5 Correct 6 ms 2816 KB Output is correct
6 Correct 4 ms 2816 KB Output is correct
7 Correct 5 ms 2816 KB Output is correct
8 Correct 5 ms 2816 KB Output is correct
9 Correct 6 ms 2944 KB Output is correct
10 Correct 4 ms 2688 KB Output is correct
11 Correct 6 ms 2816 KB Output is correct
12 Correct 8 ms 3072 KB Output is correct
13 Correct 8 ms 3200 KB Output is correct
14 Correct 4 ms 2688 KB Output is correct
15 Correct 6 ms 2816 KB Output is correct
16 Correct 673 ms 42192 KB Output is correct
17 Correct 127 ms 13168 KB Output is correct
18 Correct 186 ms 14428 KB Output is correct
19 Correct 850 ms 47344 KB Output is correct
20 Correct 346 ms 36664 KB Output is correct
21 Correct 58 ms 7032 KB Output is correct
22 Incorrect 374 ms 32632 KB Output isn't correct