最短路。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define maxv 100500 #define maxe 1000050 #define inf 2000000000 using namespace std; int n,m,x,y,z,g[maxv],nume=1,dis[maxv]; queue <int> q; bool vis[maxv]; struct edge { int v,w,nxt; }e[maxe]; void addedge(int u,int v,int w) { e[++nume].v=v;e[nume].w=w; e[nume].nxt=g[u];g[u]=nume; } void spfa() { for (int i=1;i<=n;i++) dis[i]=inf; dis[1]=0;q.push(1);vis[1]=true; while (!q.empty()) { int head=q.front();q.pop(); for (int i=g[head];i;i=e[i].nxt) { int v=e[i].v; if (dis[v]>dis[head]+e[i].w) { dis[v]=dis[head]+e[i].w; if (!vis[v]) {vis[v]=true;q.push(v);} } } vis[head]=false; } } int main() { scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); addedge(x,y,z); } spfa(); printf("%d\n",dis[n]); return 0; }