給你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...