几乎是dijkstra的模板题,但我也只是初学者。好不容易才搞明白最简单的暴力。
#include<iostream>
#define INF 0x3f3f3f3f
using namespace std;
int t[1005],g[1005][1005],d[1005];
bool vis[1005]={0};
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>t[i];
for(int i=1;i<=n;i++)
d[i]=INF;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
g[i][j]=INF;
d[1]=0;
for(int i=1;i<=m;i++){
int f,t,w;
cin>>f>>t>>w;
g[f][t]=g[t][f]=w;
}
for(int i=1;i<=n;i++){
int minn=INF,x;
for(int j=1;j<=n;j++)
if(!vis[j]&&minn>=d[j])
minn=d[x=j];
vis[x]=1;
for(int j=1;j<=n;j++)
d[j]=min(d[x]+g[x][j]+t[j],d[j]);
}
cout<<d[n]-t[n];
return 0;
}