這道題題目真的想吐槽一下...是在機房同學的解釋下才看懂的。就是讓你求在可以刪一條邊的情況下,並且刪後保證可以到達終點時,求刪了後的最大的最短路徑。
70分暴力思路:
列舉刪邊,然後跑一下最短路即可,思路很簡單,下面給出70分**:
#include using namespace std;
vector> e[1010];
int n , m , ans;
int dis[1010] , vis[1010] , l[500010] , r[500010];
void work(int uu , int vv)
}} }
ans = max(ans , dis[n]);
}int main()
for(int i = 1; i <= m; i++) work(l[i] , r[i]); //刪除
cout << ans;
return 0;
}
100分滿分思路:
我們先預處理求一遍最短路,當我們開始刪邊時,如果刪的不是最短路徑上的邊時,那麼答案還是原來的最短路,因為我們最短路要用的邊一條沒變。所以,我們只需要列舉刪掉最短路上的邊即可,這樣答案一定改變,同時注意能達到終點。下面給出滿分**:
#include using namespace std;
vector> e[1010];
int n , m , ans;
int dis[1010] , vis[1010] , pre[1010];
void work(int uu , int vv)
}} }
ans = max(ans , dis[n]);
}void p_work()
}} }
ans = max(ans , dis[n]);
}int main()
p_work(); //預處理刪哪些邊
for(int i = n; i; i = pre[i]) work(i , pre[i]);
cout << ans;
return 0;
}
洛谷P1186瑪麗卡
先跑一遍最短路,將最短路的路徑記錄下來,然後列舉每一條最短路的邊,將其斷掉,記錄此時的1 n的時間,取其中最大的乙個時間即為所求。通過 cut 和 f 進行操作 注意這個題是個稠密圖,可能會卡 spfa 所以我用了堆優化 dijk include include include include in...
洛谷 P1186 瑪麗卡
麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無論哪一條路...
洛谷 P1186 瑪麗卡
麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無論哪一條路...