Submission #1312518

#TimeUsernameProblemLanguageResultExecution timeMemory
1312518galactic_programmerRobot (JOI21_ho_t4)C++20
0 / 100
81 ms7928 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int N=1e5+5; const int inf=1e18; struct freq { int x,time; }; struct elem { int x,col,cost; bool operator<(const elem& e) const { return cost<e.cost; } }; freq f[N]; int n,m,i,j,x,y,c,p,d[N]; vector<elem> edge[N],one[N],two[N],more[N]; void dijkstra(int orig) { for(i=1;i<=n;++i) d[i]=inf; priority_queue<elem> q; q.push({orig,0,0}); d[orig]=0; while(!q.empty()) { auto e=q.top(); q.pop(); int x=e.x,curr_col=e.col; for(auto f:one[x]) { int y=f.x,col=f.col,cost=f.cost; if(d[y]>d[x]) { d[y]=d[x]; q.push({y,col,d[y]}); } } for(auto f:two[x]) { int y=f.x,col=f.col,cost=f.cost; if(curr_col==col) cost=0; if(d[y]>d[x]+cost) { d[y]=d[x]+cost; q.push({y,col,d[y]}); } } for(auto f:more[x]) { int y=f.x,col=f.col,cost=f.cost; if(d[y]>d[x]+cost) { d[y]=d[x]+cost; q.push({y,col,d[y]}); } } } } signed main() { cin>>n>>m; for(i=1;i<=m;++i) { cin>>x>>y>>c>>p; edge[x].push_back({y,c,p}); } for(i=1;i<=n;++i) { for(auto e:edge[i]) { int x=e.x,c=e.col; if(f[c].time!=i) { f[c].time=i; f[c].x=1; } else f[c].x++; } for(auto e:edge[i]) { int x=e.x,col=e.col,cost=e.cost; if(f[col].x==1) one[i].push_back({x,col,cost}); else if(f[col].x==2) two[i].push_back({x,col,cost}); else more[i].push_back({x,col,cost}); } } dijkstra(1); if(d[n]==inf) cout<<-1; else cout<<d[n]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...