給出乙個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現在想把危險程度降到最小...