洛谷P1186 瑪麗卡(斷邊 最短路)

2021-08-29 18:45:26 字數 727 閱讀 4305

傳送門

這個題意描述的狗屁不通。。。其實大概就是

1-n有m條邊

但m條邊中可能會有一條邊無法通過

求出時間t,保證時間t內無論哪條路無法通過,都能滿足有一條從1-n路徑總時間小於或等於t的最短路

然後思路就很簡單啊,我們列舉最短路的邊,依次斷掉每一條同時再跑一遍最短路,統計一下最大值即可。

通過乙個pre陣列可以實現列舉最短路的邊,原理很簡單:最短路上的每乙個點,最後被鬆弛的那一次就是最關鍵的邊。

#include#define n 1005

#define m 10000005

using namespace std;

int n,m,first[n],tot,zdl[n],max_cost,pre[n];

const int inf=0x3f3f3f3f;

bool vis[n],is_first;

struct node

edge[2*m];

inline void addedge(int x,int y,int z)

queue q;

int spfa(int s)

is_first=true;

max_cost=spfa(1);

is_first=false;

for(int i=pre[n];i;i=pre[edge[i].from])

cout<

洛谷 P1186 瑪麗卡

這道題題目真的想吐槽一下.是在機房同學的解釋下才看懂的。就是讓你求在可以刪一條邊的情況下,並且刪後保證可以到達終點時,求刪了後的最大的最短路徑。70分暴力思路 列舉刪邊,然後跑一下最短路即可,思路很簡單,下面給出70分 include using namespace std vector e 101...

洛谷P1186瑪麗卡

先跑一遍最短路,將最短路的路徑記錄下來,然後列舉每一條最短路的邊,將其斷掉,記錄此時的1 n的時間,取其中最大的乙個時間即為所求。通過 cut 和 f 進行操作 注意這個題是個稠密圖,可能會卡 spfa 所以我用了堆優化 dijk include include include include in...

洛谷 P1186 瑪麗卡

麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無論哪一條路...