int dijkstra()
{
memset(dist,0x3f,sizeof dist);
priority_queue[HTML_REMOVED],greater[HTML_REMOVED]>heap;
//优先队列的定义
heap.push({0,1});
dist[1]=0;
while(!heap.empty())
{
auto t=heap.top();
heap.pop();
int d=t.first,ver=t.second;
if(st[ver])continue;//1.解决重边多权重问题
st[ver]=true;//2.拿出就是确定的点并且st都在循环内部判断
for(int i=h[ver];i!=-1;i=ne[i])
//3.枚举边更新点的距离 h[ver] ne[i] 下一个点j=e[i] 权重就是w[i]
{
j=e[i];
if(dist[j]>dist[ver]+w[i])
{
dist[j]=dist[ver]+w[i];
heap.push({dist[j],j});
}
}
if(dist[n]==0x3f3f3f3f)return -1;
else return dist[n];
}
//与朴素版本思路一样