結果

提出番号 1083
提出者 lglover
言語 C++
提出日時 2017-12-10 09:14:21
問題名 (49)最短経路問題
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 4ms 17488KB
2 AC 100% 3ms 17504KB
3 AC 100% 4ms 17504KB
4 AC 100% 3ms 17488KB
5 AC 100% 9ms 17504KB
6 AC 100% 11ms 18496KB
7 AC 100% 6ms 18496KB
8 AC 100% 10ms 18480KB
9 AC 100% 11ms 18480KB
10 AC 100% 6ms 18480KB
11 AC 100% 183ms 62048KB
12 AC 100% 125ms 61968KB
13 AC 100% 121ms 62080KB
14 AC 100% 106ms 61952KB
15 AC 100% 80ms 58272KB
16 AC 100% 190ms 61952KB
17 AC 100% 213ms 62032KB
18 AC 100% 217ms 61952KB
19 AC 100% 135ms 61968KB
20 AC 100% 180ms 61984KB
21 AC 100% 162ms 61952KB
22 AC 100% 214ms 61952KB
23 AC 100% 181ms 61824KB
24 AC 100% 170ms 61984KB
25 AC 100% 211ms 61936KB
26 AC 100% 128ms 62048KB
27 AC 100% 212ms 62016KB
28 AC 100% 156ms 62016KB
29 AC 100% 227ms 61968KB
30 AC 100% 110ms 62000KB

ソースコード

#include <iomanip>
#include <random>
#include <time.h>
#include <vector>
#include <queue>
#include <functional>
#include <map>
#include <string>
#include <cstdlib>
#include <typeinfo>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <list>
#include <stack>
#include <set>
using namespace std;
typedef long long int ll;
typedef pair<ll, ll> P;
ll inf = 1e9;
ll n, m;
vector<P>g[100010];

ll jk(ll s, ll t) {
	priority_queue<P, vector<P>, greater<P>>que;
	ll d[100010], dis, v, nv, nc;
	for (int i = 0; i < 100010; i++)d[i] = inf;
	d[s] = 0;
	que.push(P(0, s));
	while (!que.empty()) {
		dis = que.top().first;
		v = que.top().second;
		que.pop();
		for (int i = 0; i < g[v].size(); i++) {
			nv = g[v][i].first;
			nc = g[v][i].second;
			if (d[v] + nc<d[nv]) {
				d[nv] = d[v] + nc;
				que.push(P(d[nv], nv));
			}
		}
	}
	if (d[t] == inf)return -1;
	else return d[t];
}

int main() {
	cin.tie(0);
	ios_base::sync_with_stdio(false);
	cin >> n >> m;
	ll a, b, c;
	for (int i = 0; i < m; i++) {
		cin >> a >> b >> c;
		a--, b--;
		g[a].push_back(P(b, c));
		g[b].push_back(P(a, c));
	}
	cout << jk(0, n - 1) << endl;
	return 0;
}