Submission #820169

#TimeUsernameProblemLanguageResultExecution timeMemory
820169lprochniakJakarta Skyscrapers (APIO15_skyscraper)C++17
0 / 100
1 ms1108 KiB
#include<bits/stdc++.h> using namespace std; #define MAX 30009 #define pb push_back #define st first #define nd second int n,m; int p[MAX]; struct Node{ int v; int waga; }; vector<Node> edges[MAX]; int wyn[MAX]; void dijkstra(int s){ priority_queue<pair<int,int>> q; q.push({0,s}); while(!q.empty()){ pair<int,int> t = q.top(); q.pop(); t.st = -t.st; for(auto x:edges[t.nd]){ if(t.st+x.waga<wyn[x.v]){ wyn[x.v] = t.st + x.waga; q.push({-wyn[x.v],x.v}); } } } } int main(){ cin>>n>>m; memset(p,0,sizeof p); for(int i=0;i<m;i++){ int b,pwr; cin>>b>>pwr; p[b] = pwr; } for(int i=0;i<n;i++){ if(p[i] == 0) continue; int idx = i-p[i]; int ile = 1; while(idx>=0){ edges[i].pb({idx,ile}); idx-=p[i],ile++; } idx = i+p[i]; ile = 1; while(idx<n){ edges[i].pb({idx,ile}); idx+=p[i],ile++; } } for(int i=1;i<n;i++){ wyn[i] = 1000000000; } dijkstra(0); if(wyn[1] == INT_MAX){ cout<<"-1\n"; } else cout<<wyn[1]<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...