這個題貌似時最小瓶頸路的前身,單次離線查詢。
思路: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的一條簡單路徑,使路徑上所有邊中最大值最小。應用 次小生成樹 給定一張無向圖,求出一棵生成樹,其所有邊的權值之和僅次於最小生成樹的權值之和 如果有多個最小生成樹的話次小生成樹就是最小生成樹 思路 先求出最小生成樹。列舉所有樹外的邊加入最小生成樹,則一...