#include<bits/stdc++.h>
using namespace std;
#define int long long
#define MAXN 200005
struct node{
int v,w;
};
struct dij{
int dis,id;
};
bool operator <(const dij &x,const dij &y){
return x.dis>y.dis;
}
vector<node> edge[MAXN];
int n,m,dis[MAXN],s,u,v,w,k;
priority_queue<dij> heap;
void Dijkstra(int s) {
fill(dis+1,dis+n+1,INT_MAX);
dis[s]=0;
heap.push(dij{0,s});
while(!heap.empty()) {
dij cur=heap.top();
heap.pop();
int u=cur.id;
if(cur.dis>dis[u]) continue;
for(auto v:edge[u]) {
if(dis[v.v]>dis[u]+v.w) {
dis[v.v]=dis[u]+v.w;
heap.push(dij{dis[v.v],v.v});
}
}
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m>>s>>k;
for(int i=1;i<=m;i++)
{
cin>>u>>v>>w;
node t;
t.v=v;
t.w=w;
edge[u].push_back(t);
}
Dijkstra(s);
cout<<dis[k];
return 0;
}
只对了第一个点。但是这个模板是正确的,模板题过了