結果

提出番号 1417
提出者 square1001
言語 C++
提出日時 2018-08-02 21:49:03
問題名 (49)最短経路問題
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 2ms 8688KB
2 AC 100% 2ms 8432KB
3 AC 100% 2ms 8720KB
4 AC 100% 2ms 7248KB
5 AC 100% 2ms 7792KB
6 AC 100% 5ms 8112KB
7 AC 100% 5ms 7632KB
8 AC 100% 5ms 7824KB
9 AC 100% 5ms 8256KB
10 AC 100% 5ms 8416KB
11 AC 100% 195ms 45360KB
12 AC 100% 168ms 45344KB
13 AC 100% 173ms 45392KB
14 AC 100% 207ms 45344KB
15 AC 100% 183ms 41264KB
16 AC 100% 246ms 45328KB
17 AC 100% 235ms 45376KB
18 AC 100% 208ms 45328KB
19 AC 100% 241ms 45328KB
20 AC 100% 236ms 45280KB
21 AC 100% 236ms 45296KB
22 AC 100% 246ms 45312KB
23 AC 100% 235ms 45296KB
24 AC 100% 231ms 45344KB
25 AC 100% 249ms 45328KB
26 AC 100% 231ms 45328KB
27 AC 100% 252ms 45360KB
28 AC 100% 211ms 45344KB
29 AC 100% 252ms 45328KB
30 AC 100% 232ms 45360KB

ソースコード

#include <queue>
#include <vector>
#include <iostream>
using namespace std;
struct edge {
	int to, cost;
};
struct state {
	int pos; long long cost;
};
bool operator<(const state& s1, const state& s2) {
	return s1.cost > s2.cost;
}
int main() {
	int N, M, a, b, c;
	cin >> N >> M;
	vector<vector<edge> > G(N);
	for (int i = 0; i < M; ++i) {
		cin >> a >> b >> c; --a, --b;
		G[a].push_back(edge{ b, c });
		G[b].push_back(edge{ a, c });
	}
	vector<long long> dist(N, 1LL << 62); dist[0] = 0;
	priority_queue<state> que; que.push(state{ 0, 0 });
	while (!que.empty()) {
		state u = que.top(); que.pop();
		for (edge e : G[u.pos]) {
			if (dist[e.to] > dist[u.pos] + e.cost) {
				dist[e.to] = dist[u.pos] + e.cost;
				que.push(state{ e.to, dist[e.to] });
			}
		}
	}
	cout << (dist[N - 1] == (1LL << 62) ? -1 : dist[N - 1]) << '\n';
	return 0;
}