This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ii pair<ll,ll>
#define fi first
#define se second
#define endl '\n'
#define puf push_front
#define pof pop_front
#define pub push_back
#define pob pop_back
#define rep(x,s,e) for (auto x=s-(s>e);x!=e-(s>e);s<e?x++:x--)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int) (x).size()
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int n,k;
struct E{
int l,r;
int t;
int c;
};
vector<E> v;
ll memo[5005];
vector<int> al[5005];
bool proc[5005];
ll w[5005];
int main(){
cin.tie(0);
cout.tie(0);
cin.sync_with_stdio(false);
cin>>n>>k;
int a,b,c,d;
rep(x,0,k){
cin>>a>>b>>c>>d;
v.pub({b,c+1,a,d});
}
rep(x,0,k){
rep(y,0,k){
if (v[x].t<=v[y].t && v[y].l+(v[y].t-v[x].t)<=v[x].r) al[x].pub(y);
if (v[y].t<v[x].t && v[y].l+(v[x].t-v[y].t)<=v[x].r) al[x].pub(y);
}
}
ll ans=1e18;
memset(w,63,sizeof(w));
rep(x,0,k) if (v[x].l==1) w[x]=0;
rep(x,0,k){
int curr=-1;
rep(y,0,k) if (!proc[y] && (curr==-1 || w[curr]>w[y])) curr=y;
//cout<<curr<<endl;
proc[curr]=true;
if (v[curr].r==n+1) ans=min(ans,w[curr]+v[curr].c);
for (auto &it:al[curr]){
if (w[it]>w[curr]+v[curr].c){
w[it]=w[curr]+v[curr].c;
}
}
}
if (ans==1e18) cout<<"-1"<<endl;
else cout<<ans<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |