数据规模十分良心,相当于是一个最短路算法裸题,打一遍模板即可。
代码实现:(此为spfa)
#include<bits/stdc++.h>
#define N 2500+10
using namespace std;
int n,m,st,ed;
int d[N],used[N];
vector<int>v[N];
vector<int>val[N];
queue<int>q;
int main(){
memset(used,0,sizeof used);
memset(d,0x3f,sizeof d);
cin>>n>>m>>st>>ed;
d[st]=0;used[st]=1;
for(int i=1;i<=m;i++){
int a,b,c;
cin>>a>>b>>c;
if(a==b)continue;
v[a].push_back(b);
v[b].push_back(a);
val[a].push_back(c);
val[b].push_back(c);
}
q.push(st);
while(q.size()){
int x=q.front();q.pop();
used[x]=0;
for(int i=0;i<v[x].size();i++){
int y=v[x][i],z=val[x][i];
if(d[y]>d[x]+z){
d[y]=d[x]+z;
if(used[y]==0){
q.push(y);
used[y]=1;
}
}
}
}
cout<<d[ed];
return 0;
}