#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef pair<int,int> PII;
vector<PII> g[N];
int dis[N];//边全值
int st[N];//存储状态
signed main()
{
int n,m;
cin>>n>>m;
while(m--)
{
int u,v,w;
cin>>u>>v>>w;
g[u].push_back({v,w});
}
priority_queue<PII, vector<PII>, greater<PII> > q;
q.push({0,1});
memset(dis,0x3f3f3f3f,sizeof dis);
dis[1]=0;//第一个边权值为零
while(q.size())
{
PII t=q.top();
q.pop();
int dist=t.first;//边权值,距离
int cur=t.second;//第一个点
if(st[cur]) continue;
st[cur]=true;
for(PII t1:g[cur])
{
int next1=t1.first;//下一个点
int len=t1.second;//cur到next1的距离
if(dis[next1]>dis[cur]+len)
{
dis[next1]=dis[cur]+len;
q.push({dis[next1],next1});
}
}
}
if(dis[n]!=0x3f3f3f3f)
cout<<dis[n]<<endl;
else cout<<"-1";
}
850.Dijkstra求最短路 II(小白 vector版本)
于 2024-04-05 21:35:37 首次发布