題意:給定 n
nn 個點的座標 (xi
,yi)
(x_i,y_i)
(xi,y
i),這 n
nn 個點構成乙個無向完全圖。起點是 1
11 號,終點是 2
22 號。從起點到終點會有很多路徑,每條路徑上的邊都有乙個最大值,求這些最大值中的最小值。
思路:dijkstra變形,d
d[\ ]
d 陣列則代表從起始點到達當前點的路徑裡最大邊權的最小值。
首先初始化 d[s
]=0d[s]=0
d[s]=0
,其餘的 d
d[\ ]
d 均初始化為 inf。
每次找到未訪問結點中 d
d[\ ]
d 最小的結點 u
uu,再以 u
uu 為中介點對 u
uu 可達的節點進行優化。
假設有路徑 u→v
u \rightarrow v
u→v,承重為 w
ww,可以發現:
如果選擇了該路徑並且該路徑上的最大邊權 max
(d[u
],w)
max(d[u] , w)
max(d[
u],w
) 比 d[v
]d[v]
d[v]
還小,那麼 d[v
]=ma
x(d[
u],w
)d[v] = max(d[u],w)
d[v]=m
ax(d
[u],
w)。(最大相對於該路徑內部而言,最小相對於全域性而言)
#include
#include
#include
#include
#include
using
namespace std;
const
int inf =
0x3f3f3f3f
;const
int n =
210;
struct node a[n]
;int n;
double g[n]
[n];
double d[n]
;bool vis[n]
;double
get(
int i,
int j)
void
dijkstra()
d[1]
=0;for
(int i =
0; i < n;
++i)}if
(u ==-1
)return;
vis[u]
=true
;for
(int v =
1; v <= n;
++v)
// 用u去更新其他點if(
!vis[v]
&&max
(d[u]
, g[u]
[v])
< d[v]
) d[v]
=max
(d[u]
, g[u]
[v]);}
}int
main()
return0;
}
POJ 2253 Frogger 最短路小變形
傳送門 參考 題意 給出乙個無向圖,求一條從 1 到 2 的路徑,使得路徑上的最大邊權最小 思路 dij將距離更新改成取最大值即可,即dis i 表示到達i點過程中的最大邊權,更新後可能多個,再靠優先佇列取出最小的最大邊權。include include include include includ...
2253 Frogger 解題報告
accecpttime 2008 12 30 11 11 23 language c memory 572k time 16ms errors 2wa algorithm dijkstra最短路徑 include include include include include using names...
POJ 2253(floyd 條件改變)
poj 2253 題意 有很多座標,求點一到點二的每個通路之中最長的距離,輸出最長的距離之中最短的那個。這道題無關最短路,利用floyd的遍歷,但是關鍵在於條件。include include includeusing namespace std double path 210 210 class ...