
- 3 3
- 1 2 2
- 2 3 1
- 1 3 4
3
- #include
- using namespace std;
- const int N = 3e5, inf = 0x3f3f3f3f;
- typedef pair<int, int> pii;
- int n, m, e[N], ne[N], h[N], w[N], dis[N],idx;
- bool st[N];
-
- void add(int a, int b, int c) {
- w[idx] = c;
- e[idx] = b;
- ne[idx] = h[a];
- h[a] = idx++;
- }
-
- int dijkstra() {
- memset(dis, 0x3f, sizeof dis);
- priority_queue
, greater >heap; - heap.push({ 0,1 });
- dis[1] = 0;//初始化起点位置;
- while (heap.size()) {
- auto now = heap.top();
- heap.pop();
- int pos = now.second, dist = now.first;
- if (st[pos]) continue;
- st[pos] = true;
- for (int i = h[pos];i != -1;i = ne[i]) {
- int j = e[i];
- if (dis[j] > dist + w[i]) {//w[i]表示到i点这条边的距离而不是w[j]
- dis[j] = dist + w[i]; //i只是个下标,e中在存的是i这个下标对应的点
- heap.push({ dis[j],j });
- }
- }
- }
-
- if (dis[n] == inf) return -1;
- else return dis[n];
- }
-
-
-
- int main() {
- memset(h, -1, sizeof h);
- cin >> n >> m;
- for (int i = 0;i < m;i++) {
- int a, b, c;
- cin >> a >> b >> c;
- add(a, b, c);
- }
- cout << dijkstra() << endl;
- }