#include<bits/stdc++.h>
#define pa pair<int,int>
using namespace std;
int n,m,s,t,dis[2505];
bool b[2505];
struct Edge{int to,val;Edge(int _,int __){to=_,val=__;}};
vector<Edge>e[2505];
priority_queue<pa,vector<pa>,greater<pa> >q;
inline void Dijkstra(){
memset(dis,127,sizeof(dis));
dis[s]=0;
q.push(pa(0,s));
while(!q.empty()){
int x=q.top().second;q.pop();
if(x==t) return;
if(b[x]) continue;
for(int i=0;i<e[x].size();++i){
if(dis[x]+e[x][i].val<dis[e[x][i].to]){
dis[e[x][i].to]=dis[x]+e[x][i].val;
q.push(pa(dis[e[x][i].to],e[x][i].to));
}
}
b[x]=1;
}
}
int main(){
scanf("%d%d%d%d",&n,&m,&s,&t);
for(int i=1;i<=m;++i){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
e[x].push_back(Edge(y,z));
e[y].push_back(Edge(x,z));
}
Dijkstra();
printf("%d",dis[t]);
return 0;
}
【模板】Dijkstra堆优化
最新推荐文章于 2024-03-26 10:27:41 发布