Submission #423712

#TimeUsernameProblemLanguageResultExecution timeMemory
423712kai824Treatment Project (JOI20_treatment)C++17
0 / 100
3097 ms6136 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int mxm=100005,inf=1e17; int t[mxm],l[mxm],r[mxm],c[mxm]; vector<int> adj[mxm]; int dist[mxm];bool vis[mxm]; void main1(int n,int m){ ; } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(0); int n,m; cin>>n>>m; //funny how subtasks 1-3 can be done with dijkstra, and ST4 is... 2d segtree with lazy nodes? idk //if(m>5000)main1(n,m); for(int i=0;i<m;i++){ cin>>t[i]>>l[i]>>r[i]>>c[i]; if(l[i]==1)adj[m].push_back(i); if(r[i]==n)adj[i].push_back(m+1); } for(int i=0;i<m;i++){ for(int j=i+1;j<m;j++){ //cout<<"Iteration "<<i<<' '<<j<<'\n'; if(t[i]>t[j])swap(i,j); int a,b; a=l[i]+t[j]-t[i]; b=r[i]-t[j]+t[i]; if(l[i]==1)a=1; if(r[i]==n)b=n; if(a>b)goto end; //compare range [a,b] with [l[j],r[j]] if(l[j]-1<=b && b<=r[j]){ adj[i].push_back(j);adj[j].push_back(i); // cout<<"PATH1 "<<a<<' '<<b<<' '<<l[j]<<' '<<r[j]<<'\n'; // cout<<i<<' '<<j<<'\n'; }else if(a-1<=r[j] && r[j]<=b){ adj[i].push_back(j);adj[j].push_back(i); // cout<<"PATH2 "<<a<<' '<<b<<' '<<l[j]<<' '<<r[j]<<'\n'; // cout<<i<<' '<<j<<'\n'; } end:; if(i>j)swap(i,j); } } for(int i=0;i<m+2;i++)dist[i]=inf; dist[m]=0; while(true){ int a=-1; for(int i=0;i<m+1;i++){ if(vis[i])continue; if(a==-1 || dist[i]<dist[a])a=i; } if(a==-1)break; vis[a]=true; for(int x:adj[a]){ dist[x]=min(dist[x],dist[a]+c[x]); } } if(dist[m+1]==inf)cout<<"-1\n"; else cout<<dist[m+1]<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...