제출 #373801

#제출 시각아이디문제언어결과실행 시간메모리
373801victoriadJakarta Skyscrapers (APIO15_skyscraper)C++14
0 / 100
2 ms512 KiB
#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> #include <utility> #include <queue> #include <map> #include <iomanip> using namespace std; int d(int x,int y,vector<vector<pair<int,int> > >&s){ int N=s.size(); vector<int>dis(N,1e9); dis[x]=0; priority_queue<pair<int,int> >pq; pq.push(make_pair(0,x)); while(!pq.empty()){ int nodo=pq.top().second; int d=-pq.top().first; pq.pop(); if(d>dis[nodo]) continue; dis[nodo]=d; for(pair<int,int>v:s[nodo]){ int vec=v.first; int dv=v.second; if(dis[vec]>dis[nodo]+dv){ dis[vec]=dis[nodo]+dv; pq.push(make_pair(-dis[vec],vec)); } } } if(dis[y]==1e9){ return -1; } else{ return dis[y]; } } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); int N,M,B,P; cin>>N>>M; vector<vector<pair<int,int> > >s(N); vector<int>b(M); for(int i=0;i<M;i++){ cin>>B>>P; b[i]=B; int j=B; int o=1,u=1; while(j-P>=0){ s[B].push_back(make_pair(j-P,P*o)); j=j-P; o++; } while(j+P<=N){ s[B].push_back(make_pair(j+P,P*u)); j=j+P; u++; } } int x=b[0]; int y=b[1]; cout<<d(x,y,s); 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...