AcWing851 spfa求最短路
模板题
#include<iostream> #include<queue> #include<cstring> using namespace std; const int N=1e5+10; const int inf=0x3f3f3f3f; int dis[N]; int st[N],n,m; int h[N],ne[N],e[N],w[N],idx; void add(int a,int b,int c){ e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++; } int spfa(){ queue<int> q; int i; memset(dis,0x3f,sizeof dis); dis[1]=0; q.push(1); st[1]=1; while(q.size()){ int t=q.front(); q.pop(); st[t]=0; for(i=h[t];i!=-1;i=ne[i]){ int j=e[i]; if(dis[j]>dis[t]+w[i]){ dis[j]=dis[t]+w[i]; if(!st[j]){ st[j]=1; q.push(j); } } } } return dis[n]; } int main(){ cin>>n>>m; int i; memset(h,-1,sizeof h); for(i=1;i<=m;i++){ int u,v,c; scanf("%d%d%d",&u,&v,&c); add(u,v,c); } int t=spfa(); if (t == 0x3f3f3f3f) puts("impossible"); else printf("%d\n", t); return 0; }
没有人不辛苦,只有人不喊疼