結果
| 問題 |
No.1065 電柱 / Pole (Easy)
|
| コンテスト | |
| ユーザー |
srjywrdnprkt
|
| 提出日時 | 2023-01-17 17:59:55 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 402 ms / 2,000 ms |
| コード長 | 1,367 bytes |
| コンパイル時間 | 1,094 ms |
| コンパイル使用メモリ | 121,328 KB |
| 最終ジャッジ日時 | 2025-02-10 04:03:25 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 46 |
ソースコード
#include <iostream>
#include <vector>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <numeric>
#include <deque>
#include <complex>
#include <cassert>
using namespace std;
template<typename T> using pq = priority_queue<T, vector<T>, greater<T>>;
int main(){
long long N, M, start, goal, from, P, Q;
cin >> N >> M >> start >> goal;
start--; goal--;
long double alt, d;
vector<long double> X(N), Y(N);
for (int i=0; i<N; i++) cin >> X[i] >> Y[i];
pq<pair<long double, long long>> que;
vector<vector<pair<long long, long double>>> E(N);
vector<long double> dist(N, 1e18);
vector<bool> visit(N);
for (int i=0; i < M; i++){
cin >> P >> Q; P--; Q--;
d = sqrt((X[P]-X[Q])*(X[P]-X[Q])+(Y[P]-Y[Q])*(Y[P]-Y[Q]));
E[P].push_back({Q, d});
E[Q].push_back({P, d});
}
dist[start] = 0;
que.push({0, start});
while(!que.empty()){
tie(d, from) = que.top();
que.pop();
if (visit[from]) continue;
visit[from] = 1;
for (auto [to, C] : E[from]){
alt = d + C;
if (alt < dist[to]){
dist[to] = alt;
que.push({dist[to], to});
}
}
}
cout << setprecision(18) << dist[goal] << endl;
return 0;
}
srjywrdnprkt