最短路:求最長最短路
列舉刪邊跑Dijskra
HDU - 1595 find the longest of the shortest
#include <set>
#include <map>
#include <list>
#include <cmath>
#include <stack>
#include <queue>
#include <string>
#include <bitset>
#include <vector>
#include<cstring>
#include <stdio.h>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
inline int read(){int s=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;}
const int maxn = 1e3+5;
int n,m;
int dis[maxn],pre[maxn],par[maxn];
int E[maxn][maxn];
bool vis[maxn],flag=false;
void Dijskra(int s)
{
memset(dis,INF,sizeof(dis));
memset(par,-1,sizeof(par)); // par 記錄路徑
memset(vis,false,sizeof(vis));
dis[s]=0;
for(int i=1;i<n;i++)
{
int node=-1;
for(int j=1;j<=n;j++)
if(!vis[j]&&(node==-1||dis[node]>dis[j]))
node=j;
for(int j=1;j<=n;j++){
if(dis[j]>dis[node]+E[node][j])
dis[j]=dis[node]+E[node][j],par[j]=node;
}
vis[node]=true;
}
if(!flag){
for(int i=1;i<=n;i++) pre[i]=par[i];
flag=true;
}
}
/* 題意:求最長最短路
* 分析:列舉每一邊進行刪減,每次再跑Dijskra ,再取Max即可
*/
int main()
{
while (~scanf("%d%d",&n,&m))
{
memset(E,INF,sizeof(E));
for(int i=1;i<=m;i++)
{
int u=read(),v=read(),w=read();
E[u][v]=min(w,E[u][v]);
E[v][u]=E[u][v];
}
int ans=-INF,q=n;
flag=false;
Dijskra(1);
if(dis[n]!=INF) ans=max(dis[n],ans);
while (pre[q]!=-1) // pre儲存的是最短路每一條邊,相當於路徑回溯過程
{
int p=pre[q],w=E[p][q];
E[p][q]=INF,E[q][p]=INF;
Dijskra(1);
if(dis[n]!=INF) ans=max(dis[n],ans);
E[p][q]=w,E[q][p]=w;
q=p;
}
printf("%d\n",ans);
}
return 0;
}
相關文章
- 最短路 || 最長路 || 次短路
- 2024_4_22 路徑花費為最長$k$條邊之和最短路
- 最長公共子序列求方案數
- 最長
- distance(Floyd求最短路)
- NlogN 求最長不下降子序列(LIS)
- 動態規劃求最長降序序列動態規劃
- 分層圖求最短路
- 矩陣求最短路徑矩陣
- 最長子串
- 最長公共字首
- 最長公共子序列
- 最長遞增子序列
- 最長有效括號
- 最長上升子序列
- 最長上升子串
- 最長相等子序列
- 最長最短單詞
- 求字串中不含重複字元的最長子串字串字元
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- L2-008 最長對稱子串【最長迴文字串】字串
- Day 45 | 300.最長遞增子序列 、674. 最長連續遞增序列 、718. 最長重複子陣列陣列
- 14_最長公共字首
- 最長的Hello, World!(Python)Python
- 14. 最長公共字首
- lCS(最長公共子串)
- Leedcode-最長特殊序列 Ⅰ
- 力扣最長公共字首力扣
- 每日leetcode——最長公共字首LeetCode
- 最長同值路徑
- 最長公共子序列(JAVA)Java
- LeetCode最長公共字首(Python)LeetCodePython
- 14.最長公共字首
- 最短路
- 次短路
- 最大值(最短路+最短路計數)
- 牛客練習賽27【C 水圖 dfs求最長路】
- 求最短路徑——DFS+Floyd演算法演算法