답안 #106305

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
106305 2019-04-17T20:35:41 Z tincamatei 악어의 지하 도시 (IOI11_crocodile) C++14
100 / 100
907 ms 46868 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 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) {
		best[P[i]][0] = best[P[i]][1] = 0;
		pq.push(make_pair(0, P[i]));
	}

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

		pq.pop();

		if(best[nod][1] == cost) {
			for(auto it: graph[nod]) {
				int cost2 = cost + it.second;
				int old = best[it.first][1];
				if(cost2 < best[it.first][0]) {
					best[it.first][1] = best[it.first][0];
					best[it.first][0] = cost2;
				} else if(cost2 < best[it.first][1])
					best[it.first][1] = cost2;
				
				if(best[it.first][1] != old)
					pq.push(make_pair(-best[it.first][1], 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;
	}
	
	dijkstra(N, K, P);
	return best[0][1];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2688 KB Output is correct
2 Correct 3 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 4 ms 2816 KB Output is correct
6 Correct 4 ms 2736 KB Output is correct
7 Correct 4 ms 2816 KB Output is correct
8 Correct 4 ms 2816 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2688 KB Output is correct
2 Correct 3 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 4 ms 2816 KB Output is correct
6 Correct 4 ms 2736 KB Output is correct
7 Correct 4 ms 2816 KB Output is correct
8 Correct 4 ms 2816 KB Output is correct
9 Correct 7 ms 2944 KB Output is correct
10 Correct 5 ms 2816 KB Output is correct
11 Correct 5 ms 2816 KB Output is correct
12 Correct 8 ms 3072 KB Output is correct
13 Correct 6 ms 3072 KB Output is correct
14 Correct 4 ms 2688 KB Output is correct
15 Correct 4 ms 2816 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2688 KB Output is correct
2 Correct 3 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 4 ms 2816 KB Output is correct
6 Correct 4 ms 2736 KB Output is correct
7 Correct 4 ms 2816 KB Output is correct
8 Correct 4 ms 2816 KB Output is correct
9 Correct 7 ms 2944 KB Output is correct
10 Correct 5 ms 2816 KB Output is correct
11 Correct 5 ms 2816 KB Output is correct
12 Correct 8 ms 3072 KB Output is correct
13 Correct 6 ms 3072 KB Output is correct
14 Correct 4 ms 2688 KB Output is correct
15 Correct 4 ms 2816 KB Output is correct
16 Correct 664 ms 41984 KB Output is correct
17 Correct 113 ms 11636 KB Output is correct
18 Correct 153 ms 13048 KB Output is correct
19 Correct 907 ms 46868 KB Output is correct
20 Correct 330 ms 36604 KB Output is correct
21 Correct 74 ms 6648 KB Output is correct
22 Correct 385 ms 32376 KB Output is correct