結果
| 問題 |
No.1065 電柱 / Pole (Easy)
|
| コンテスト | |
| ユーザー |
rtia_iidx
|
| 提出日時 | 2020-05-29 21:34:35 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 248 ms / 2,000 ms |
| コード長 | 7,110 bytes |
| コンパイル時間 | 1,393 ms |
| コンパイル使用メモリ | 117,404 KB |
| 実行使用メモリ | 25,112 KB |
| 最終ジャッジ日時 | 2024-11-06 02:41:54 |
| 合計ジャッジ時間 | 7,161 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 46 |
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<unordered_map>
#include<climits>
#include<cstdlib>
#include<cmath>
#include<string>
#include<iomanip>
#include<bitset>
#include<list>
/*
__,.二ニ==- ニ.、_.
.,..‐ ⌒ ``'ァ-ニ、.
ィ'´. ´丶.、
.,ィ'´ `.x、..
.. /. 、\.
.ン′. ¬`""冖ーミト.
,r′. .ヘ、 `
ツ `、....
./´ ヘ
..... /. .〉.
´/.. .l
ィ . f..
.. .f ,d. l ′ 」 ,. ト !
. 〕../.f.. ′ .. | .} | |.
.!./..f.. / !- ナ丶п冖т ノー- . 〕 |.
|メ | | j , ┌. |〈. л`. /|.. ┤,..
...「...|. | ´ l. | j.L......ュ.L_└ヽ_|Y. メムw ょ | j.: |  ̄
. |. т〕<.ィ冖T冖.. г‐ `、 `, /┴¬..г ̄|.. .′ |
... | ... ),|.. ` リ 「_ノ.|| ` V |!{,「ll ´.」. 卜
. |.」 ′ ヽ └++〃.. ルwf カz′. |.
|..〕 「 .|
.l.|. ′. |
. .〕.. `! _.....ー:'' 」 ´ λ.
_「. , ┐_,、`~‐''"´ ィ .、 ヘ、
f :__..,二ュ.-i―'''^~´ 、\イ ヘ.`x
. / { j .~^
、/ 't.. 丿..
.../. ,x┐.. ∠∫
:^. /  ̄冖ー=zzュ┌ー―-- ∟,二..._. _,、.-ー.'l+~. .l`.
. У. ⌒冖‐-=._.. l「.「 ´ ̄」了 .,、-''^ 〉 ヽ_
_/.  ̄~'.ー-=.、_,..usァ.ー''" { \´
_ヰl'¬―- 、_ ( .\
*/
using namespace std;
using ll = long long int;
using ull = unsigned long long int;
ll const MOD = 1000000007;
ll const INF = (long long int)1 << 61;
ll mypow(ll x,ll n,ll mod = MOD){
ll ret = 1;
while(n > 0){
if(n&1){
ret = (ret*x)%mod;
}
x = (x*x)%mod;
n >>= 1;
}
return ret;
}
ll mygcd(ll a,ll b){
if(b == 0)return a;
return mygcd(b,a%b);
}
ll twoPow(ll shiftNum){
return (1LL << (shiftNum - 1));
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll n,m;
cin >> n >> m;
ll x,y;
cin >> x >> y;
vector<ll> a(n+1),b(n+1);
for(int i = 1; i <= n; i++){
cin >> a[i] >> b[i];
}
vector<list<ll>> edge(n+1);
for(int i = 0; i < m; i++){
int p,q;
cin >> p >> q;
edge[p].push_back(q);
edge[q].push_back(p);
}
priority_queue<pair<double,int>,vector<pair<double,int>>,greater<pair<double,int>>> pq;
vector<double> v(n+1,1e9);
vector<bool> used(n+1,false);
v[x] = 0.0;
pq.push(make_pair(0.0,x));
while(!pq.empty()){
auto tmp = pq.top();
pq.pop();
if(used[tmp.second])continue;
used[tmp.second] = true;
for(auto e: edge[tmp.second]){
if(!used[e] && v[tmp.second] + sqrt(abs(a[tmp.second] - a[e])*abs(a[tmp.second] - a[e]) + abs(b[tmp.second] - b[e])*abs(b[tmp.second] - b[e]) ) < v[e]){
v[e] = v[tmp.second] + sqrt(abs(a[tmp.second] - a[e])*abs(a[tmp.second] - a[e]) + abs(b[tmp.second] - b[e])*abs(b[tmp.second] - b[e]) );
pq.push(make_pair(v[e],e));
}
}
}
cout << setprecision(17) << fixed;
cout << v[y] << endl;
return 0;
}
rtia_iidx