bzoj3732 最小生成樹 倍增

2021-08-01 16:46:24 字數 991 閱讀 7763

顯然使a到b的最長邊最小的路徑一定在最小生成樹上,否則一定可以使生成樹更小。

求出原圖的最小生成樹,然後用倍增求路徑上最大值就可以了。

**:

1 #include2 #include3 #include4 #include5

using

namespace

std;

6#define n 15010

7#define s 15

8struct

edge

11 edge(int f,int t,int

w):f(f),t(t),w(w){}

12bool

operator

< (edge a)const

15 }e[n<<1

],tmp;

16 priority_queueq;

17int

d[n],i,j,k,x,y,z,n,m,num,h[n],f[n][s],max[n][s];

18 inline int _max(int x,int y)

19 inline void add(int x,int y,int

z)22 inline int find(int x)

23 inline void dfs(int x,int

f)28 inline int query(int x,int

y)38

intmain()

3948 dfs(1,0

);49

for(j=1;j)

50for(i=1;i<=n;i++)

51 f[i][j]=f[f[i][j-1]][j-1],max[i][j]=_max(max[i][j-1],max[f[i][j-1]][j-1

]);52

while(k--)

56return0;

57 }

bzoj3732

bzoj3732 最小生成樹 倍增

顯然使a到b的最長邊最小的路徑一定在最小生成樹上,否則一定可以使生成樹更小。求出原圖的最小生成樹,然後用倍增求路徑上最大值就可以了。1 include2 include3 include4 include5 using namespace std 6 define n 15010 7 define ...

HYSBZ 3732 最小生成樹 倍增Lca

題目 碼了乙個星期終於過了這一題。渣是原罪.最小生成樹 倍增lca 思路不難,但這是我第一次寫lca的題目。下面一步步來解釋這題。題意 給你m條無向邊,有k個查詢,問從a到b所有路徑上的最長邊的最小值。首先,從a到b所有路徑上的最長邊的最小值所對應的邊一定在最小生成樹上。為什麼?現在來回憶一下kru...

bzoj 4242 水壺 最小生成樹 樹上倍增

為了降低ac率 這道題目我各種花樣作死爆oj,最後還是和標算改得差不多了。顯然答案應該為建築物構成的最小生成樹中,兩點間的最大路徑 那麼只要得到這棵最小生成樹就可以用倍增在o qlogn 的時間內得到答案了。因此關鍵是求最小生成樹。注意到是平面圖,因此考慮用bfs求最小生成樹。直接以每個建築為原點拓...