제출 #1288101

#제출 시각아이디문제언어결과실행 시간메모리
1288101lambd47Jakarta Skyscrapers (APIO15_skyscraper)C++20
36 / 100
160 ms327680 KiB
//#pragma GCC optimize(O3) #include<bits/stdc++.h> using namespace std; #define L(i,j,k) for(int i=(j);i<=(k);i++) #define R(i,j,k) for(int i=(j);i>=(k);i--) #define all(v) (v).begin(),(v).end() #define sz(v) ((int)(v).size()) void solve(){ int n,m; cin>>n>>m; vector<vector<int>> adj(m); vector<int> pos(m); vector<int> pulo(m); L(i,0,m-1)cin>>pos[i]>>pulo[i]; vector<vector<int>> dist(m,vector<int>(m)); L(i,0,m-1){ L(j,0,m-1){ if(i==j)continue; dist[i][j]=(abs(pos[i]-pos[j])%pulo[i]); if(dist[i][j]==0){dist[i][j]=abs((pos[i]-pos[j]))/pulo[i];adj[i].push_back(j);} } } const int MOD=1e9+7; vector<int> dp(m,MOD); dp[0]=0; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq; pq.push({dp[0],0}); while(!pq.empty()){ auto [d,v]=pq.top(); pq.pop(); if(d!=dp[v])continue; for(auto node:adj[v]){ if(dp[node]>dp[v]+dist[v][node]){ dp[node]=dp[v]+dist[v][node]; pq.push({dp[node],node}); } } } cout<<((dp[1]==MOD)?-1:dp[1]); } int main(){ ios_base::sync_with_stdio(0); cin.tie(NULL); solve(); } //fazer um pseudo floyd warshal, na vdd da pra construir um super clique com as distancias de cada um
#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...