#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
struct Node
{
int k;
int w;
};
bool operator <(const Node &a,const Node &b)
{
return a.w>b.w;
}
priority_queue<Node> pq;
bool bused[30010]={0};
vector<vector<Node> > v;
const unsigned int inf=1000000000;
int main()
{
int n,m,a,b,c;
int i,j;
Node p;
scanf("%d%d",&n,&m);
v.clear();
v.resize(n+1);//设置容器大小
memset(bused,0,sizeof(bused));
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
p.k=b;
p.w=c;
v[a].push_back(p);
}
p.k=1;
p.w=0;
pq.push(p);
while(!pq.empty())
{
p=pq.top();
pq.pop();
if(bused[p.k])
continue;
bused[p.k]=true;
if(p.k==n)
break;
for(i=0,j=v[p.k].size();i<j;i++)
{
Node q;
q.k=v[p.k][i].k;
if(bused[q.k]) continue;
q.w=p.w+v[p.k][i].w;
pq.push(q);
}
}
printf("%d",p.w);
return 0;
}
最短路径+堆
最新推荐文章于 2022-03-10 17:18:07 发布