ssl2779 Heatwave 最小生成樹 倍增

2021-08-09 19:28:30 字數 1227 閱讀 1879

給你n個點的無向連通圖,圖中有m條邊,第j條邊的長度為: d_j.

現在有 k個詢問。

每個詢問的格式是:a b,表示詢問從a點走到b點的所有路徑中,最長的邊最小值是多少?

要求u,v兩點中的最長邊的最小值,設該值為ans,那麼,把權小於等於ans的邊組成的圖中,u,v一定是連通的。也就是說,對於乙個圖,求任意兩點的答案,它的路徑,一定是在這個圖的最小生成樹上。然後,考慮每兩個點,用樹上倍增法,預處理出max[i,j]為從i往根走2^j步的最大值,類似lca的方法求答案即可。

ps:學習了如何樹上倍增,我都已經忘光了。。。

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct arredge[300000];

int ls[200000];

int n,m,k;

int edge_m;

bool cmp(arr a,arr b)

}void merge(int x,int y)

void add(int x,int y,int w);}

struct arr1edge1[2000000];

int ls1[2000000];

int nn;

void add1(int x,int y,int w)

int fa[25000][20];

int d[25000][20];

int dep[25000];

int maxn;

int dfs(int x)

}int dp(int x,int y)

return max(max(ans,d[x][0]),d[y][0]);

}int main()

sort(edge+1,edge+m+1,cmp);

for (int i=1;i<=n;i++) f[i]=i;

int ans=0;

int num=0;

int i=1; nn=0;

while ((num1)&&(i<=m))

i++;

}maxn=trunc(log2(n));

dfs(1);

for (int i=1;i<=k;i++)

}

ssl1764 最小生成樹II

最小生成樹ii time limit 10000ms memory limit 65536k total submit 314 accepted 142 case time limit 1000ms description 農民約翰被選為他們鎮的鎮長!他其中乙個競選承諾就是在鎮上建立起網際網路,並連...

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...