您的位置:首页 > 其它

【模板】Dijkstra堆优化

2018-01-16 08:25 253 查看
bzoj 3408

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: