#include<bits/stdc++.h> usingnamespace std; constint MAX_N = 150005, MAX_M = 150005; int head[MAX_N], ver[MAX_M], edge[MAX_M], nxt[MAX_M], tot; int n, m, d[MAX_N]; bool v[MAX_N]; // pair<-dist[x], x> priority_queue<pair<int, int>> q;
// 插入一条从x到y长度z的有向边 voidadd(int x, int y, int z){ tot++; ver[tot] = y; edge[tot] = z; nxt[tot] = head[x]; // 在head[x]这条链的开头插入新点 head[x] = tot; }
intmain(){ cin >> n >> m; for (int i = 1; i <= m; i++) { int x, y, z; scanf("%d%d%d", &x, &y, &z); add(x, y, z); } memset(d, 0x7f, sizeof(d)); d[1] = 0; q.push(make_pair(0, 1)); while (!q.empty()) { int x = q.top().second; q.pop(); if (v[x]) continue; v[x] = true; for (int i = head[x]; i; i = nxt[i]) { int y = ver[i], z = edge[i]; if (d[y] > d[x] + z) { d[y] = d[x] + z; q.push(make_pair(-d[y], y)); } } } if (d[n] == 0x7f7f7f7f) puts("-1"); else cout << d[n] << endl; }
#include<bits/stdc++.h> usingnamespace std; constint MAX_N = 150005, MAX_M = 150005; int head[MAX_N], ver[MAX_M], edge[MAX_M], nxt[MAX_M], tot; int n, m, d[MAX_N];
// 插入一条从x到y长度z的有向边 voidadd(int x, int y, int z){ tot++; ver[tot] = y; edge[tot] = z; nxt[tot] = head[x]; // 在head[x]这条链的开头插入新点 head[x] = tot; }
intmain(){ cin >> n >> m; for (int i = 1; i <= m; i++) { int x, y, z; scanf("%d%d%d", &x, &y, &z); add(x, y, z); } memset(d, 0x7f, sizeof(d)); d[1] = 0; for (int cnt = 1; cnt <= n - 1; cnt++) { bool flag = false; for (int x = 1; x <= n; x++) { for (int i = head[x]; i; i = nxt[i]) { int y = ver[i], z = edge[i]; if (d[y] > d[x] + z) { d[y] = d[x] + z; flag = true; } } } if (!flag) break; } if (d[n] == 0x7f7f7f7f) puts("impossible"); else cout << d[n] << endl; }
#include<bits/stdc++.h> usingnamespace std; constint MAX_N = 150005, MAX_M = 150005; int head[MAX_N], ver[MAX_M], edge[MAX_M], nxt[MAX_M], tot; int n, m, d[MAX_N]; bool v[MAX_N]; // 点是否在队列中 queue<int> q;
// 插入一条从x到y长度z的有向边 voidadd(int x, int y, int z){ tot++; ver[tot] = y; edge[tot] = z; nxt[tot] = head[x]; // 在head[x]这条链的开头插入新点 head[x] = tot; }
intmain(){ cin >> n >> m; for (int i = 1; i <= m; i++) { int x, y, z; scanf("%d%d%d", &x, &y, &z); add(x, y, z); } memset(d, 0x7f, sizeof(d)); d[1] = 0; q.push(1); v[1] = true; while (!q.empty()) { int x = q.front(); q.pop(); v[x] = false; for (int i = head[x]; i; i = nxt[i]) { int y = ver[i], z = edge[i]; if (d[y] > d[x] + z) { d[y] = d[x] + z; if (!v[y]) { q.push(y); v[y] = true; } } } } if (d[n] == 0x7f7f7f7f) puts("impossible"); else cout << d[n] << endl; }