#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200010;
int n, m, dis[2][MAXN];
struct Node {
int pos, dis;
friend bool operator<(Node a, Node b) {
return a.dis > b.dis;
}
} ;
vector <Node> p[MAXN];
priority_queue <Node> q;
void dijkstra() {
for (int i = 1; i <= n; ++i)
dis[0][i] = dis[1][i] = INT_MAX;
dis[0][1] = 0;
q.push({1, 0});
while (!q.empty()) {
Node u = q.top();
q.pop();
for (int i = 0; i < p[u.pos].size(); ++i) {
int to = p[u.pos][i].pos;
int w = p[u.pos][i].dis;
// 如果这条路径小于最短路
if (dis[0][to] > u.dis + w) {
dis[1][to] = dis[0][to]; // 那这个原来的最短路就成了次短路
dis[0][to] = u.dis + w; // 更新最短路
q.push({to, dis[0][to]});
}
else if (dis[1][to] > u.dis + w) { // 否则继续判断如果这条路小于次短路
dis[1][to] = u.dis + w; // 更新次短路
q.push({to, dis[1][to]});
}
}
}
}
int main() {
scanf("%d%d", &n, &m);
while (m--) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
p[u].push_back({v, w});
p[v].push_back({u, w});
}
dijkstra();
printf("%d", dis[1][n]);
return 0;
}
不太懂为什么HACK的点WA了