洛谷P2245 星際導航 最小生成樹 lca

2021-09-29 13:26:16 字數 1519 閱讀 4426

給出乙個n≤1

e5,m

≤3e5

n\leq1e5,m\leq3e5

n≤1e5,

m≤3e

5的無向圖,無向圖的圖上有邊權。然後給出q≤1

e5

q\leq1e5

q≤1e

5次詢問,每次詢問給出兩個點u,v

u,vu,

v,求u,v

u,vu,

v路徑上最大邊的最小值。

應該是乙個挺常規的問題:

容易想到這樣的路徑是最小生成樹上的路徑。先求出最小生成樹,然後可以預處理出lca

lcalc

a,在倍增的過程中可以維護每個結點向上2k2^

2k級祖先的邊權的最大值。

注意可能不連通

#include

using

namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int n=

1e5+7;

int fa[n]

;int

find

(int x)

void

unity

(int x,

int y)

struct edge

}e[3

*n];

struct edge

;vector go[n]

;int dep[n]

;int f[n][22

],mi[n][22

];void

dfs(

int u,

int fa)

}int

lca(

int u,

int v)}if

(u==v)

return ans;

for(

int i=

20;i>=

0;i--)}

ans=

max(ans,mi[u][0

]); ans=

max(ans,mi[v][0

]);return ans;

}int

main()

sort

(e+1

,e+1

+m);

for(

int i=

1;i<=m;i++))

; go[v]

.push_back()

;}}for

(int i=

1;i<=n;i++)}

for(

int j=1;

(1<<=n;j++)}

int q;

scanf

("%d"

,&q)

;while

(q--

)return0;

}

最小生成樹 LCA 洛谷 P2245 星際導航

sideman做好了回到gliese 星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman 現在想把危險程度降到最小...

洛谷P2245 星際導航

sideman做好了回到gliese 星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman 現在想把危險程度降到最小...

P2245 星際導航

sideman做好了回到gliese星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有 n 個頂點和 m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman現在想把危險程度降到最小...