知识点传送门
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int N = 1e5 + 10;
int n, m;
struct Edge
{
int v, w, next;
} e[N << 1];
int head[N], tot;
void add(int u, int v, int w)
{
e[++ tot] = Edge{ v, w, head[u] };
head[u] = tot;
}
int dis[N], vis[N];
struct Node
{
int v, w;
bool operator < (const Node a) const
{
return w > a.w;
}
};
void dijkstra(int s)
{
memset(dis, inf, sizeof dis);
memset(vis, 0, sizeof vis);
priority_queue<Node> q;
dis[s] = 0;
q.push(Node{ s, dis[s] });
while (q.size())
{
Node now = q.top(); q.pop();
int u = now.v;
vis[u] = 1;
for (int i = head[u]; i; i = e[i].next)
{
int v = e[i].v, w = e[i].w;
if (! vis[v] && dis[v] > dis[u] + w)
{
dis[v] = dis[u] + w;
q.push(Node{ v, dis[v] });
}
}
}
}
int main()
{
scanf("%d", &n);
int u, v, w;
for (int i = 1; i <= m; i ++)
{
scanf("%d %d %d", &u, &v, &w);
add(u, v, w);
add(v, u, w);
}
dijkstra(1);
printf("%d\n", dis[n]);
return 0;
}