天天突發奇想, 要去 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...