HN0I2000最優乘車 最短路變形

2022-07-24 08:33:11 字數 1836 閱讀 6038

【試題】為了簡化城市公共汽車收費系統,某城市決定對大部分的公共汽車都採用一票制,但由於某些公共汽車所經過的停車站太多和路途太長,就採用兩票或多票制。經過這種票制改革後,人們坐公共汽車從乙個站到另乙個站時,就不得不選擇乙個好的乘車方案,以使他們的乘車費用最低。

為了方便於求出最佳的乘車方案,我們假設:

l  採用一票制的公共汽車,無論從哪個站上車到那個站下車,乘該公共汽車的費用為1(費用單位)。

l  採用多票制的公共汽車,將設立某些站為關鍵站;那麼,如果某人乘該路公共汽車從a站到b站時,不經過任何關鍵站的乘車費用為1,而經過k個關鍵站的乘車費用為k+1;所謂經過關鍵站是指:乘該路公共汽車時,該關鍵站是其途中的乙個站,但它不是上車站也不是下車站;例如,某路公共汽車經過1,2,3,4,*5,6,7,8,9;其中5是關鍵站,那麼,從5站上車到9站下車或從2站上車到5站下車的費用為1,而從4站上車到6站下車的費用將是2。

l  所有公共汽車都是雙向行駛的,也即如果公共汽車經過的站點有a和b,那麼,你可以乘該公共汽車從a到b或從b到a。

你的任務就是:對於輸入檔案中給出的公共汽車各停車站,和某乘客的起點站a和終點站b,請你程式設計為乘客求出最佳的乘車方案,使得他的乘車費用最少。

輸入:第1行為n、r、a和b,其中n為城市公共汽車停車站的總個數,這些停車站被統一編號為1、2、……、n;r為公共汽車總路數。a為起點站的編號,b為終點站的編號。(1≤n≤1000,1≤r≤300,每路公共汽車的最多站點數為20)。資料之間用空格分開。

第2行到r+1行的每一行為一路公共汽車經過的停車站編號,停車站編號的排列順序是該路公共汽車按乙個方向行車順序依次經過的停車站,如為關鍵停車站,則其編號的前面有乙個*。每行資料之間用空格分開。

輸出:從a站到b站所需的最少費用。如果不能乘這些公共汽車從a到b,輸出-1。

輸入輸出示例:

input4.txt

12 4 1 12

1 2 3 *4 5 6 7

1 2 3 8

8 4 5 9

7 6 5 *9 10 11 12

output4.txt

解題報告

好稀有的題目,在網上根本找不到的說。

很典型的最短路。對於每一條公交線路,我們讓其中的每乙個站點互相建邊,使其權值為票價,注意邊界問題,起點與終點為關鍵站不計入票價中。

用堆優dijkstra即可。

#include#define pair pair#define maxn 1000+10

#define maxm 600000+1

using

namespace

std;

intn,m,num,head[maxn],s,t,dis[maxn],v[maxm];

intpre[maxn];

int read(int &k)

for(;c<='

9'&&c>='

0';c=getchar()) in=in*10+c-'0'

; k=in

;

if(j) return2;

return1;

}struct

edgeedge[maxm];

void add(int

from,int to,int

dis)

void

dij()

}}int

main()

for(int i=1;i<=np;i++)}}

dij();

if(dis[t]>=2147483647) printf("

-1\n");

else printf("

%d\n

",dis[t]);

return0;

}

重疊i 0非同步socket模型

因為相信,每個qq頭像亮著的背後,電腦前都坐著乙個孤獨的人。你的個性簽名不再更新,qq頭像不再亮,所以我相信你在生活中是開心的。天橋還是那座天橋,車樑還是會從下面經過,路燈還是兩排。只是我們都回不去那樣的場景了。錯過好幾次約會,上班遲到扣了好幾次工資,為得到一點成就感,現在放出來。include s...

SH0I 2009 會場預約

題目鏈結 發現這道題可以用stl做,就犯了懶,學了學set的用法,不得不佩服c 的發明者啊 首先先感謝這位博主 set,顧名思義,就是數學上的集合 每個元素最多隻出現一次,並且set中的元素已經從小到大排好序。標頭檔案 include set 常用操作 begin 返回set容器的第乙個元素的位址 ...

計算組合數 i 0,n i C n,i

題目 組合數學中恒等式的證明 1 i 0,n i 2 c n,i n n 1 2 n 2 還有乙個 i 0,n 1 i 1 i 2 c n,i 2 n 2 n 3 n 1 n 2 麻煩給出詳解,解答 第乙個,利用 1 x n i 0,n c n,i x i,兩邊對x求導,得 n 1 x n 1 i ...