2017 03 04 天天愛旅遊

2021-07-27 20:19:49 字數 1527 閱讀 2922

天天突發奇想, 要去 g 地, 於是他搞來了一張地圖, 看怎麼走才好。

地圖上有很多城市, g 地也是一座城市。 每兩座城市之間都可能有直達方法, 也有可能 兩座城市之間並不能直接相通, 而要通過其他的城市轉達。 對於兩個城市之間的直達方法, 需要一定的時間, 當然, 如果從 a 城市到 b 城市的直達方法需要 t 時間, 那麼從 b 城市到 a 城市的直達方法也是 t 時間。

天天想要用最短的時間到達 g 地, 但是有個問題, 他發現, 地圖上有些城市對他很有 吸引力。 所以他要在經過這些城市的基礎上時間最短。

天天已經用 1、 2、 3、 4、 5……n 標記了他可能經過的城市( 1 代表出發地, n 代表 g 地), 但是眼花繚亂的地圖讓他感到煩惱。 他請你來解決這個問題, 告訴他最小需要多少時 間到達 g 地。

input

第一行是三個正整數 n 和 m, t, n 表示總共有多少個城市( 包括出發地和 g 地), 城市 數不會超過 200 個; m 是城市的直達路線數( 1<=m<=20000), t 表示一定去的城市數 0<=t<=10 ( 不包括出發地和 g 地)。

接下來一行有 t 個整數, 表示一定要去的城市。

接下來 m 行, 每行包含三個正整數, 前兩個數表示分別代表乙個城市, 第三個數是這 兩個城市之間的直達時間。 直達時間不會超過 1000000。

輸出乙個數, 題目要求的得最短時間。

5 10 2

2 3

1 2 5

1 3 45

1 4 61

1 5 81

2 3 9

2 4 91

2 5 4

3 4 74

3 5 42

4 5 61

1<=n<=200

1<=m<=20000

0<=t<=10

最短路 ,搜尋, 動態規劃, 狀態壓縮

超超超超級類似與售貨員的難題,先走一遍floyed找最短路,然後dfs,找到ans最小值即可

求最短路,優秀的暴力有30左右

#include 

#include

#include

#include

#include

#include

#include

using

namespace

std;

int road[201][201],des[201],ans;

bool vis[201];

int n,m,t;

void dfs(int x,int dis,int num)//現在所在城市,從起始點到這個城市已經走過的距離,從起始點到這個城市已經到過的城市數量

for(int i=1;i<=t;i++)//列舉城市

}}int main()

for(int k=1;k<=n;k++)

for(int i=1;i<=n;i++)

for(int j=i+1;j<=n;j++)//floyed求最短路

NOIP2016 天天愛跑步

時間限制 2 s 記憶體限制 512 mb 題目描述 小c同學認為跑步非常有趣,於是決定製作一款叫做 天天愛跑步 的遊戲。天天愛跑步 是乙個養成類遊戲,需要玩家每天按時上線,完成打卡任務。這個遊戲的地圖可以看作一棵包含n個結點和n 1條邊的樹,每條邊連線兩個結點,且任意兩個結點存在一條路徑互相可達。...

NOIP2016天天愛跑步

小c同學認為跑步非常有趣,於是決定製作一款叫做 天天愛跑步 的遊戲。天天愛跑步 是乙個養成類遊戲,需要玩家每天按時上線,完成打卡任務。這個遊戲的地圖可以看作一一棵包含 nn n個結點和 n 1n 1n 1條邊的樹,每條邊連線兩個結點,且任意兩個結點存在一條路徑互相可達。樹上結點編號為從11 1到nn...

luogu P1600 天天愛跑步

傳送門 1a此題暴祭 下面記點 x 深度為 de x 某個時間點記為 w x 首先,每條路徑是可以拆成往上和往下兩條路徑的 對於往上的路徑,假設有個人往上跑,w y 在點 y 那麼如果能對點 x 的觀察員產生貢獻,當且僅當 w x de x w y de y 對於往下的路徑,假設有個人往下跑,w y...