求调(样例都没过)
#include<bits/stdc++.h>
using namespace std;
int n,m,s,t;
struct edge{
int to,len,nxt;
}v[20005];
int tot=0;
int head[10005];
void add(int ui,int vi,int wi){
tot++;
v[tot].nxt=head[ui];
v[tot].len=wi;
v[tot].to=vi;
head[ui]=tot;
}
int dis[10005];
bool has[10005];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >pq;
void dijkstra(int start){
pq.push(make_pair(0,start));
while(!pq.empty()){
int min_dis=pq.top().first;
int id=pq.top().second;
pq.pop();
if(has[id]) continue;
has[id]=1;
for(int i=head[id];i!=-1;i=v[i].nxt){
if(!has[v[i].to]&&dis[v[i].to]>min_dis+v[i].len){
dis[v[i].to]=min_dis+v[i].len;
pq.push(make_pair(dis[v[i].to],v[i].to));
}
}
}
}
int main(){
memset(dis,0x3f,sizeof(dis));
memset(head,-1,sizeof(head));
cin>>n>>m>>s>>t;
int ui,vi,wi;
for(int i=1;i<=m;i++){
cin>>ui>>vi>>wi;
add(ui,vi,wi);
}
dis[s]=0;
dijkstra(s);
cout<<dis[t];
return 0;
}