找位置 衝刺 noip

2021-08-29 05:31:52 字數 2201 閱讀 3434

找位置

**測試區

題目:

farmer john 想找乙個最好的位置來建新農場,這樣他每天可以少走些路。

fj 所在的區域,有n 個城鎮(1 <= n <= 10,000)。

城鎮之間,有m(1 <= m <= 50,000)條雙向路相連。

所有城鎮都可以借助一些路相互連線。

fj 需要你的幫助來選擇最合適建新農場的城鎮。

k(1 <= k <= 5)個城鎮中有超市,fj 每天都會去這些超市。

他計畫每天從新農場出發,訪問包含超市的k 個城鎮,然後返回新農場。

fj 可以按照任意的順序訪問這些超市。

fj 只會在n-k 個城鎮中,選擇乙個城鎮來建新農場。因為其他城鎮的房價,

比較低一些。

如果他把農場建在最優的位置,而且盡可能明智的選擇行走路線。

請幫fj 計算,他每天需要行走的最短路線長度。

當然,乙個城鎮可以經過多次。

輸入格式:

第1 行:三個空格隔開的整數,n,m 和k。

第2…1+k 行:第i+1 行包含乙個整數,範圍1…n,表示包含第i 個超市的

城鎮。每個超市在不同城鎮。

第2+k…1+k+m 行:每行包含三個空格隔開的整數,i,j(1 <= i,j <= n),

和l(1 <= l <= 1000), 表示城鎮i 和城鎮j 之間存在一條長度為l 的路。

輸出格式:

如果他把農場建在最優的位置,fj 每天需要行走的最短路線長度。

輸入輸出樣例:

樣例輸入1:

5 6 312

31 2 1

1 5 2

3 2 3

3 4 5

4 2 7

4 5 10

樣例輸出1:

12樣例解釋:

fj 在5 號城鎮建立農場。他每天的行走路線為5-1-2-3-2-1-5,路線長度為

12題解:

知識點:最短路、深搜(或者dp)

講解:

#include

#include

#include

#include

using

namespace std;

int di[10]

[10100

],su[10]

,head[

100100

],next[

100100

],ver[

100100

],edge[

100100

],size=

0,vist[

10100

],check[10]

,k,n,v[

10100];

priority_queue int,

int>

>q;

void

add(

int x,

int y,

int u)

//邊表嘗龜操作

void

dijkstra

(int t)

//單源最短路 }}

}int

work

(int t,

int r,

int p)

//我們遞迴排列超市順序求最小,t表示我們目前已經排列到第t個超市,已經經過r個超市,最開始是從p號城市出發的

return ans;

}int

main()

for(

int i=

1;i<=m;i++

)for

(int i=

1;i<=k;i++

)//對於每乙個超市求一遍最短路

dijkstra

(i);

for(

int i=

1;i<=n;i++)}

printf

("%d"

,min)

;return0;

}

希望大家可以ac,馬上要noip了,衝刺noip,問鼎省隊。

NOIP2012模擬8 7 找位置

farmer john 想找乙個最好的位置來建新農場,這樣他每天可以少走些路。fj所在的區域,有n個城鎮 1 n 10,000 城鎮之間,有m 1 m 50,000 條雙向路相連。所有城鎮都可以借助一些路相互連線。fj需要你的幫助來選擇最合適建新農場的城鎮。k 1 k 5 個城鎮中有超市,fj每天都...

找位置(簡單模擬)

對給定的乙個字串,找出有重複的字元,並給出其位置,如 abcaaab12ab12 輸出 a,1 a,4 a,5 a,10,b,2 b,11,1,8 1,12,2,9 2,13。輸入描述 輸入包括乙個由字母和數字組成的字串,其長度不超過100。輸出描述 可能有多組測試資料,對於每組資料,按照樣例輸出的...

華科 找位置

對給定的乙個字串,找出有重複的字元,並給出其位置。輸入包括乙個由字母和數字組成的字串,其長度不超過100。可能有多組測試資料,對於每組資料,按照樣例輸出的格式將字元出現的位置標出。1 下標從0開始。2 相同的字母在一行表示出其出現過的位置。示例1 abcaaab12ab12 a 0,a 3,a 4,...