找位置
**測試區
題目:
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,...