結果
問題 | No.2354 Poor Sight in Winter |
ユーザー |
|
提出日時 | 2023-07-04 21:41:41 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,467 ms / 2,000 ms |
コード長 | 2,176 bytes |
コンパイル時間 | 1,004 ms |
コンパイル使用メモリ | 96,160 KB |
実行使用メモリ | 11,536 KB |
最終ジャッジ日時 | 2024-07-18 16:47:45 |
合計ジャッジ時間 | 14,974 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
コンパイルメッセージ
main.cpp: In function 'int main()': main.cpp:71:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17' [-Wc++17-extensions] 71 | auto [d,v]=pq.top(); | ^
ソースコード
#include<iostream>#include<set>#include<algorithm>#include<vector>#include<string>#include<set>#include<map>#include<numeric>#include<queue>#include<cmath>using namespace std;typedef long long ll;const ll INF=1LL<<60;typedef pair<int,int> P;typedef pair<int,P> PP;const ll MOD=1e9+7;struct edge{int to;int cost;edge(int to_,int cost_):to(to_),cost(cost_){};};int main(){int N,K;cin>>N>>K;vector<int> x(N+2),y(N+2);cin>>x[0]>>y[0]>>x[N+1]>>y[N+1];for(int i=1;i<=N;i++){cin>>x[i]>>y[i];}const int inf=1<<30;int ub=inf;//必ず到達が可能int lb=0;while(ub-lb>1){int mid=(ub+lb)/2;//cout<<"mid="<<mid<<endl;vector<vector<edge>> G(N+2);for(int i=0;i<N+2;i++){for(int j=0;j<N+2;j++){if(i==j) continue;int dist=abs(x[i]-x[j])+abs(y[i]-y[j]);int c=max((dist+(mid-1))/mid-1,0);G[i].emplace_back(j,c);G[j].emplace_back(i,c);}}//ここからダイクストラvector<int> dp(N+10,inf);//dp[i]=iに到達するまでにdp[i]個のあかりを消費するpriority_queue<P,vector<P>,greater<P>> pq;pq.emplace(0,0);while(!pq.empty()){auto [d,v]=pq.top();pq.pop();if(dp[v]<=d) continue;//dp[v]>ddp[v]=d;for(edge e:G[v]){if(dp[e.to]>(dp[v]+e.cost)){pq.emplace(dp[v]+e.cost,e.to);}}}/*for(int i=0;i<=N+2;i++){cout<<"dp["<<i<<"]="<<dp[i]<<endl;}*/if(dp[N+1]<=K){//家に到達できる場合ub=mid;}else{//家に到達できないlb=mid;}/*if(dp[N+1]>K){//家に到達できない場合lb=mid;}else{//家に到達できるub=mid;}*/}cout<<ub<<endl;}