dijkstra 模板题求解:
#include<bits/stdc++.h>
using namespace std;
priority_queue<pair<int,int> >d;
vector<int> l[6202],v[6202];
bool b[2502];
int f[2502];
int s,t,n,m;
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);
l[x].push_back(y);
l[y].push_back(x);
v[x].push_back(z);
v[y].push_back(z);
}
for(int i=1;i<=n;i++){
f[i]=1e9+1;
}
f[s]=0;
d.push(make_pair(0,s));
while(!d.empty()){
int x=d.top().second;
d.pop();
if(b[x]){
continue;
}
b[x]=1;
int sz=l[x].size();
for(int i=0;i<sz;i++){
int y=l[x][i];
f[y]=min(f[y],f[x]+v[x][i]);
d.push(make_pair(-f[y],y));
}
}
printf("%d",f[t]);
return 0;
}
为什么倒数第 6 行是 d.push(make_pair(-f[y],y)); 而不是 d.push(make_pair(-f[y],y));?本蒟蒻望了……