```
include[HTML_REMOVED]
using namespace std;
const int N=510;
int g[N][N];
int n,m;
int s[N],dist[N];
int dfs()
{
dist[1]=0;
for(int i=1;i<=n;i++)
{
int t=-1;//假设还没有找到这样的点
for(int j=1;j<=n;j++) //先找到当前剩下的最短路径
{
if(!s[j] && (t==-1 || dist[t]>dist[j]))
t=j;
}
s[t]=1;
for(int j=1;j<=n;j++)
if(dist[j]>dist[t]+g[t][j])
dist[j]=dist[t]+g[t][j];
}
if(dist[n]==0x3f3f3f3f) return -1;
else return dist[n];
}
int main()
{
scanf("%d%d",&n,&m);
int x,y,z;
memset(g,0x3f,sizeof g);
memset(dist,0x3f,sizeof dist);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
g[x][y]=min(g[x][y],z);
}
printf("%d",dfs());
return 0;
}
```