#include<bits/stdc++.h>
using namespace std;
int n,s,t,ans=1000000000;
struct A{
int l,r,h,k;
}a[1010];
bool cmp(A x,A y){
return x.h>y.h;
}
map <pair <int,int>,int> mp;
void bs(int p,int h,int now,int k,int su){
if(mp[{p,h}]>0){
return;
}
//cout<<p<<" "<<h<<" "<<su<<"\n";
if(k==t){
ans=min(su,ans);
}
for(int i=now+1;i<=n;i++){
if(a[now].l>=a[i].l&&a[now].l<=a[i].r){
bs(a[now].l,a[i].h,i,a[i].k,su+h-a[i].h+p-a[now].l);
break;
}
}
for(int i=now+1;i<=n;i++){
if(a[now].r>=a[i].l&&a[now].r<=a[i].r){
bs(a[now].r,a[i].h,i,a[i].k,su+h-a[i].h+a[now].r-p);
break;
}
}
mp[{p,h}]=ans;
};
int main(){
cin>>n>>s>>t;
for(int i=1;i<=n;i++){
cin>>a[i].l>>a[i].r>>a[i].h;
a[i].k=i;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(a[i].k==s){
bs(a[i].l,a[i].h,i,s,0);
if(ans<1000000000){
cout<<ans;
}else{
cout<<-1;
}
break;
}
}
return 0;
}
提交记录