時間限制:500ms記憶體限制:100m
最短時間
描述:
夢工廠有 n 個分廠(從 1 開始編號),有m對分廠通過雙向鐵路相連。為了保證每兩個分廠之間的同學可以方便地進行交流,掌舵人張老師就在那些沒有鐵路連線的分廠之間建造了公路。
在兩個直接通過公路或鐵路相連的分廠之間移動,需要花費 1 小時。
現在菜雞wxy和hbz都從1廠出發,wxy**車,hbz開汽車,各自前往n廠。但是,他們中途不能同時停在同乙個分廠
(但是可以同時停在n廠)。
現在請你來為wxy和hbz分別設計一條線路,使他們盡可能快地到達n廠(即要求他們中最後到達n廠的時間最短)。
所有的公路或鐵路可以被多次使用,求最短時間。(火車和汽車可以同時到達n,也可以先後到達。)
輸入:首先有 2 個整數 n 和 m (2<=n<=500, 0<=m<=n*(n-1)/2 分別表示夢工廠分廠的數目和鐵路的數目;
接下來的 m 對數字,每對由兩個整數 u 和 v 構成,表示小鎮 u 和小鎮 v 之間有一條鐵路。(u!=v 1<=u,v<=n)輸入保證無重邊
輸出
輸出乙個整數,表示答案,如果沒有合法的路線規劃,輸出-1
輸入樣例:4 31 2
2 33 4
輸出樣例:分析:每兩個工廠之間不是由鐵路連線就是由公路連線,所以1-n必有一條路,所以1-n花費時間為1,如果,1-n由鐵路相連,我們就計算公路從1到n的最短時間;反之,若1-n由公路相連,我們就計算鐵路從1到n的最短時間。所以,我們需要兩張地圖分別存鐵路和公路。然後用迪傑斯特拉求一下最短時間就可以了;3
#include
#include
#include
using
namespace std;
#define inf 0x3f3f3f
int n,m;
int g1[
505]
[505];
//存鐵路的圖
int g2[
505]
[505];
//存公路的圖
int dis[
505]
,vis[
505]
;void
dijistra
(int g[
505]
) dis[1]
=0;for
(int i=
1;i<=n;i++)}
vis[k]=1
;for
(int j=
1;j<=n;j++)}
}int
main()
if(g1[1]
[n]==0)
else
}dijistra
(g2)
;int re=dis[n];if
(re==inf)
printf
("-1\n");
else
printf
("%d\n"
,re);}
return0;
}
最短時間過橋問題
問題如下 四個女人過橋,夜間有一火把,每次最多過兩個,必需帶火把,過橋速度不一樣,分別為 兩個人過用最慢乙個的速度,火把不能扔,如何在17min內四個女人都過橋?這個問題其實園子裡已經有解決方案了 也討論了多次 不過呢 很多只有思路 原始碼也不夠詳細 於是 我再演繹一下 歸納總結一下 其實是很簡單的...
最短路 dijkstra求最短時間)
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...
所有車的過橋最短時間
今晚幫朋友助攻遇到了一道題,當時有思路但是沒有寫出來,後來結合牛客網上的解答寫了出來,也不知道具體能ac多少道題,先放在這裡等大家指點吧 有n輛車藥陸續通過一座最大承重為w的橋,其中第i輛車的重量為w i 通過橋的時間為t i 要求第i輛車上橋的時間不早於第i 1輛車上橋的時間,任意時刻橋上所有車輛...