又到暑假了,住在城市 a 的 car 想和朋友一起去城市旅遊。
她知道每個城市都有 4 個飛機場,分別位於乙個矩形的 4 個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第 i 個城市中高速鐵路了的單位里程**為 t
it_i
ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的**均為 t。
那麼 car 應如何安排到城市b的路線才能盡可能的節省花費呢?她發現這並不是乙個簡單的問題,於是她來向你請教。
找出一條從城市 a 到 b 的旅遊路線,出發和到達城市中的機場可以任意選取,要求總的花費最少。
第一行為乙個正整數 n,表示有 n 組測試資料。
每組的第一行有 4 個正整數 s,t,a,b。
s 表示城市的個數,t 表示飛機單位里程的**,a,b 分別為城市a,b 的序號。
接下來有 s 行,其中第 i 行均有 7 個正整數xi1
,yi1
,xi2
,yi2
,xi3
,yi3
,t
ix_,y_,x_,y_,x_,y_,t_i
xi1,y
i1,
xi2
,yi2
,xi
3,y
i3,
ti ,這當中的 (xi
1,yi
1),(
xi2,
yi2)
,(xi
3,yi
3)
(x_,y_),(x_,y_),(x_,y_)
(xi1,
yi1
),(x
i2,
yi2
),(x
i3,
yi3
)分別是第 i 個城市中任意 3 個機場的座標,t
it_i
ti為第 i 個城市高速鐵路單位里程的**。
共有 n 行,每行 1 個資料對應測試資料。
保留一位小數。
我們把每個城市看成4個點,簡單的spfa就好了。
對於每一次測試,都可以共用三個陣列,乙個是用來記錄各個點的座標的陣列,乙個是記錄點與點之間距離的陣列,還有乙個是記錄城市四個點之間高速的里程費用,我看到一些人還要memset,但是如果相同位置兩次測試都要用到,那麼後一次測試就會覆蓋,如果用不到,那也不會對後一次測試造成影響。
talking is cheap,show you my code.
#include
#include
#include
#include
#include
using
namespace std;
double map[
401]
[401];
int point[
401][2
];int t[
101]
;int n;
void
get_point
(int j)
if(len23 ==
(len12 + len13))if
(len13 ==
(len12 + len23))}
void
init
(int s,
int t)if(
!(map[k]
[j])
)else
map[j]
[k]= len;}}
else}}
}double
spfa
(int a,
int b,
int s)
dis[a]=0
; use[a]
=true
; queue<
int> q;
q.push
(a);
while
(!q.
empty()
)if((dis[x]
+ map[x]
[i])
< dis[i])}
}}return dis[b];}
void
test_spfa
(int a,
int b,
int s)
} cout << std::fixed << std::
setprecision(1
)<< ans << endl;
}void
test()
init(4
* s, t)
;test_spfa
(a, b,
4* s);}
intmain()
return0;
}
洛谷P1027 Car的旅行路線
又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t。圖例 從上而下 機場 高速鐵路 ...
洛谷 P1027 Car的旅行路線
又到暑假了,住在城市 aa 的 carcar 想和朋友一起去城市 bb 旅遊。她知道每個城市都有 44 個飛機場,分別位於乙個矩形的 44 個頂點上,同乙個城市中 22 個機場之間有 11 條筆直的高速鐵路,第 ii 個城市中高速鐵路了的單位里程 為 t iti 任意兩個不同城市的機場之間均有航線,...
luogu1027 Car的旅行路線
題目描述 又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t。圖例 從上而下 機場 ...