時間限制: 2 s
空間限制: 128000 kb
題目等級 : 大師 master
題解 題目描述 description
麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。
因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。
在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。
麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無論哪一條路正在維修,從瑪麗卡所在的城市都能到達麥克所在的城市。
瑪麗卡將只從不堵車的路上通過,並且她將按最短路線行車。麥克希望知道在最糟糕的情況下瑪麗卡到達他所在的城市需要多長時間,這樣他就能保證他的女朋友離開該城市足夠遠。
編寫程式,幫助麥克找出瑪麗卡按最短路線通過不堵車道路到達他所在城市所需的最長時間(用分鐘表示)。
輸入描述 input description
第一行有兩個用空格隔開的數n和m,分別表示城市的數量以及城市間道路的數量。1≤n≤1000,1≤m≤n*(n-1)/2。城市用數字1至n標識,麥克在城市1中,瑪麗卡在城市n中。
接下來的m行中每行包含三個用空格隔開的數a,b和v。其中1≤a,b≤n,1≤v≤1000。這些數字表示在a和城市b中間有一條雙行道,並且在v分鐘內是就能通過。
輸出描述 output description
輸出檔案的第一行中寫出用分鐘表示的最長時間,在這段時間中,無論哪條路在堵車,瑪麗卡應該能夠到達麥克處,如果少於這個時間的話,則必定存在一條路,該條路一旦堵車,瑪麗卡就不能夠趕到麥克處。
樣例輸入 sample input
5 71 2 8
1 4 10
2 3 9
2 4 10
2 5 1
3 4 7
3 5 10
樣例輸出 sample output
27資料範圍及提示 data size & hint
思路:不妨先從最暴力的方法想起,每條路都可能發生堵車,於是第一想法是列舉每一條路,但這樣肯定會t,那怎麼辦呢?通過進一步分析,我們發現,人物要想耗時最少,那肯定會沿著最短路走,若此時最短路之外的路堵車,那麼對答案是沒有任何貢獻的(因為還是會沿著最短路走),若最短路的其中一段發生堵車,那麼人物肯定要繞道而行了。所以我們就可以簡化列舉,具體步驟是:
1、先跑一遍spfa,在更新時加個路徑記錄。
2、順著最短路徑列舉每一段,在暫時刪去當前段的同時跑spfa,並更新ans。
時限是2s,所以這麼列舉肯定沒問題。另外暫時刪邊有個機智的做法:找到當前要刪的邊的兩個端點a、b,在遍歷圖時加判斷(始點==a 且 目標點==b)或 (始點==b 且 目標點==a),如果成立,但實際上不合法,則continue跳過。
ps:難度說是大師,但我感覺只有**呢。。
#include
#include
#include
#include
#include
#include
using namespace std;
const int n=1000+5;
const int m=499500+5;
int n,m;
struct edgeedge[m<<1];
int head[n],next[m<<1],dist[n],pre[n],tot=0;
bool inq[n];
void build(int f,int t,int d)
; next[tot]=head[f];
head[f]=tot;
}queue q;
void spfa(bool type,int lim1,int lim2)}}
}}int main()
spfa(1,0,0);
int ans=0;
for(int i=n;i;i=pre[i])
printf("%d\n",ans);
return
0;}
CodeVS1021 瑪麗卡 最短路 線段樹
題目鏈結 宣告 感謝fzw kryj 的創意和熱心講解 麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修...
瑪麗卡(spfa刪邊求最短路)
題目描述 麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無...
P1186 瑪麗卡 最短路spfa
麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無論哪一條路...