結果

提出番号 1065
提出者 olphe
言語 C++
提出日時 2017-11-15 11:06:27
問題名 (49)最短経路問題
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 2ms 8656KB
2 AC 100% 7ms 7840KB
3 AC 100% 2ms 8288KB
4 AC 100% 3ms 8704KB
5 AC 100% 2ms 7792KB
6 AC 100% 5ms 7136KB
7 AC 100% 4ms 8656KB
8 AC 100% 10ms 8736KB
9 AC 100% 6ms 8272KB
10 AC 100% 6ms 8496KB
11 AC 100% 100ms 45472KB
12 AC 100% 89ms 45472KB
13 AC 100% 125ms 45472KB
14 AC 100% 142ms 45440KB
15 AC 100% 74ms 41264KB
16 AC 100% 115ms 45440KB
17 AC 100% 110ms 45472KB
18 AC 100% 146ms 45424KB
19 AC 100% 167ms 45456KB
20 AC 100% 122ms 45424KB
21 AC 100% 107ms 45440KB
22 AC 100% 122ms 45440KB
23 AC 100% 139ms 45408KB
24 AC 100% 117ms 45472KB
25 AC 100% 118ms 45440KB
26 AC 100% 117ms 45456KB
27 AC 100% 105ms 45456KB
28 AC 100% 140ms 45424KB
29 AC 100% 144ms 45440KB
30 AC 100% 115ms 45456KB

ソースコード

#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "stack"
#include "set"
#include "functional"
#include "algorithm"
#include "string"
#include "map"
#include "iomanip"
#include "cmath"

using namespace std;

const long long int MOD = 1000000007;

long long int N, M, K, H, W, L, R;

class CEdge {
public:
	int to;
	int cost;
};

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> N >> M;
	vector<vector<CEdge>>edge(N + 1);
	vector<long long int>dis(N + 1, LLONG_MAX);
	dis[1] = 0;
	for (int i = 0; i < M; i++) {
		cin >> L >> R >> K;
		CEdge box;
		box.to = R;
		box.cost = K;
		edge[L].push_back(box);
		box.to = L;
		edge[R].push_back(box);
	}
	priority_queue<pair<long long int, int>, vector<pair<long long int, int>>, greater<pair<long long int, int>>>PQ;
	PQ.push({ 0,1 });
	while (!PQ.empty()) {
		int cn = PQ.top().second;
		long long int c = PQ.top().first;
		PQ.pop();
		if (dis[cn] < c) {
			continue;
		}
		for (auto i : edge[cn]) {
			if (dis[i.to] > c + i.cost) {
				dis[i.to] = c + i.cost;
				PQ.push({ dis[i.to],i.to });
			}
		}
	}
	if (dis[N] == LLONG_MAX) {
		cout << "-1\n";
		return 0;
	}
	cout << dis[N] << endl;
	return 0;
}