先跑一遍最短路,將最短路的路徑記錄下來,然後列舉每一條最短路的邊,將其斷掉,記錄此時的1-n的時間,取其中最大的乙個時間即為所求。
(通過 $ cut $ 和 $ f $ 進行操作)
注意這個題是個稠密圖,可能會卡 $ spfa $ ,所以我用了堆優化 $ dijk $ 。
#include #include #include #include #include using namespace std;
const int maxn = 1005;
const int maxm = 500005;
inline int read()while(ch >= '0' && ch <= '9')return x * f;}
int n,m,u,v,w;
int head[maxn],tot;
int dis[maxn],f[maxn],ans;
bool flag,cut[maxn][maxn];
struct edgeedge[maxm << 1];
struct node
} ;void add(int u,int v,int w)
void dijk(int s) );
while(!q.empty()));
}} }
} int main()
dijk(1);
flag = 1;
for(int i=n;i!=1;i=f[i])
printf("%d\n",ans);
return 0;
}
洛谷 P1186 瑪麗卡
這道題題目真的想吐槽一下.是在機房同學的解釋下才看懂的。就是讓你求在可以刪一條邊的情況下,並且刪後保證可以到達終點時,求刪了後的最大的最短路徑。70分暴力思路 列舉刪邊,然後跑一下最短路即可,思路很簡單,下面給出70分 include using namespace std vector e 101...
洛谷 P1186 瑪麗卡
麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無論哪一條路...
洛谷 P1186 瑪麗卡
麥克找了個新女朋友,瑪麗卡對他非常惱火並伺機報復。因為她和他們不住在同乙個城市,因此她開始準備她的長途旅行。在這個國家中每兩個城市之間最多只有一條路相通,並且我們知道從乙個城市到另乙個城市路上所需花費的時間。麥克在車中無意中聽到有一條路正在維修,並且那兒正堵車,但沒聽清楚到底是哪一條路。無論哪一條路...