點選開啟鏈結
題意:給乙個無向圖,然後有q次詢問u v,問的是u到v的所有路徑中的最小值最大
思路:u到v的路徑最小值最大,則這條邊肯定是最小生成樹上的邊,那麼我們可以先將所有的最小生成樹上的邊全都找出來,然後現在是乙個樹,然後跑一邊lca,對於現在詢問的u到v,只要找到它們的最近公共祖先,然後兩個點向上找到它,比較路徑中的最大值即可 ps:這麼暴力找跑得有點慢
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3f;
const int maxn=50010;
bool vis[maxn];
int n,m,k;
int l[maxn*2],e[maxn*2],h[maxn],dis[maxn],dp[2*maxn][20],num[maxn],sum[maxn],head[maxn],kkk,pre[maxn];
struct nodeee[maxn*4];
void add_edge(int u,int v,int cost)
void dfs(int t,int deep)
}}void rmq_init(){
for(int i=1;i<=2*n-1;i++) dp[i][0]=i;
for(int i=1;(1int kk=0;
while((1<
uva11354 LCA 最小生成樹 dp
源自大白書 題意 有n座城市通過m條雙向道路相連,每條道路都有乙個危險係數。你的任務是回答若干個詢問,每個詢問包含乙個起點s和乙個終點t,要求找到一條從s到t的路,使得途徑所有的邊的大最大危險係數最小。解 首先求出最小生成樹,並把它改寫成有根樹,讓fa i 和cost i 分別表示節點i的父親編號和...
UVa 11354 邦德(最小瓶頸路 LCA)
題意 有n個城市m條道路,每條道路有乙個危險係數。先在有若干個詢問,要求找到一條從s到t的路,使得途徑所有邊的最大危險係數最小。思路 最小瓶頸路肯定是在最小生成樹上的。所有先求最小生成樹。然後將它轉化成有根樹,讓fa i 和cost i 分別表示結點i的父親編號和它與父親之間的邊權l i 表示結點i...
次小生成樹(最小生成樹演算法 倍增LCA)
次小生成樹 顯然就是除開最小生成樹外最小的乙個生成樹。非嚴格次小生成樹 權值和 最小生成樹。嚴格次小生成樹 權值和 最小生成樹 求解 每次在非最小生成樹的邊裡找一條,將這條邊加入樹,此時一定形成環,再刪去環中除該邊外最大的一條邊。依次列舉每條邊,找到加入邊 刪除邊最小的一種情況,即可求出非嚴格次小生...