思路
写一个Dijkstra堆优化的模板供大家参考一下。
(码风比较丑,不要介意)
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=200005,maxm=500005;
struct E{
int next,to,dis;
}edge[maxm];
struct X{
int node,dis;
};
int n,m,u,v,w;
int cnt=0,head[maxn],dis[maxn];
bool operator <(const X a,const X b){
return a.dis>b.dis;
}
inline void addedge(int from,int to,int dis){
edge[++cnt].next=head[from];
edge[cnt].to=to;
edge[cnt].dis=dis;
head[from]=cnt;
}
priority_queue<X>q;
void dijkstra(){
q.push((X){1,0});
while(!q.empty()){
X fro=q.top();
q.pop();
for(int i=head[fro.node];i;i=edge[i].next){
int to=edge[i].to,d=edge[i].dis;
if(dis[fro.node]+d<dis[to]){
dis[to]=dis[fro.node]+d;
q.push((X){to,dis[to]});
}
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) dis[i]=1e9+7;
dis[1]=0;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
dijkstra();
if(dis[n]==1e9+7) cout<<"qwb baka";
else cout<<dis[n];
return 0;
} 
京公网安备 11010502036488号