P1396 營救 最小瓶頸路

2021-10-08 17:44:36 字數 1622 閱讀 1865

這個題貌似時最小瓶頸路的前身,單次離線查詢。

思路:1.最小生成樹kru

skal

kruskal

kruska

l,當s,t

s,ts,

t連通時的對應邊權值為答案。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e4+

5,m=

2e4+

5,inf=

0x3f3f3f3f

,mod=

1e9+7;

#define mst(a) memset(a,0,sizeof a)

#define reg register

#define pii pair

#define pb push_back

int n,m,s,t,fa[n]

;struct edge

}e[n<<1]

;int

find

(int x)

intmain()

}return0;

}

2.bfs

∣dfs

+bfs|dfs+

bfs∣df

s+二分,二分答案,判斷s,t

s,ts,

t是否連通即可。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

1e4+

5,m=

2e4+

5,inf=

0x3f3f3f3f

,mod=

1e9+7;

#define mst(a) memset(a,0,sizeof a)

#define pb push_back

int n,m,s,t,h[n]

,cnt;

struct edgee[n<<2]

;void

add(

int u,

int v,

int w)

,h[u]

=cnt;

e[++cnt]

=,h[v]

=cnt;

}bool

bfs(

int x)

; queue<

int>q;q.

push

(s),vis[s]

=true

;while

(!q.

empty()

)return vis[t]

?true

:false;}

intmain()

while

(lprintf

("%d\n"

,l);

return0;

}

3.跑最短路,改為求最大路徑權值的最小值即可,這個就不寫**了。

4.貌似還有什麼倍增lca的神仙做法,不會。

P1396 營救 題解

題目傳送門 這題有好幾種方法可以做,有跑最短路的,有些最小生成樹的。這裡介紹最短路的方法。單源最短路徑,很自然地想到 dijkstra。不過題目要求的是最大值最小,所以鬆弛就要改成 if dis v max dis u e i w dis v max dis u e i w include usin...

最小瓶頸路

題目 uva 534 題目大意 有兩隻青蛙,在兩塊不同的石頭上,有乙隻想要去拜訪另乙隻,要求通過它石頭進行跳躍然後在一起呀在一起,可想而知,由於石頭有很多,他們中間的路徑也有很多,現在要求求乙個長度 從每條路徑裡面挑出那步跨越最大的,然後從這些跨越最大的裡面挑出最小的。分析 flody 的改版 in...

最小瓶頸路

在一張無向圖中,詢問乙個點對 u,v 找出從u到v的一條簡單路徑,使路徑上所有邊中最大值最小。應用 次小生成樹 給定一張無向圖,求出一棵生成樹,其所有邊的權值之和僅次於最小生成樹的權值之和 如果有多個最小生成樹的話次小生成樹就是最小生成樹 思路 先求出最小生成樹。列舉所有樹外的邊加入最小生成樹,則一...