noip2013货车运输
Description
给你一个由$n$个点,$m$条边组成的无向图,再给你$q$个询问,问你某两个点之间的所有路径中权值最小的边最大是多少?
若两点不连通则输出$-1$。
Input
第一行:两个整数$n,m$,表示点数和边数。
接下来$m$行:每行三个整数$a,b,c$,表示点$a$与点$b$之间有一条权值为$c$的边。
接下来一行:一个整数$q$,表示$q$个询问。
接下来$q$行:每行两个整数$a,b$,表示询问的两个点。
Output
$q$行,对应每组询问的答案。
Solution
要使路径中最小的边尽量大,做一遍最大生成树把不必要的边去掉,依照最大生成树的定义,我们可以知道在这棵树上两点之间的路径边权最小的边一定是最优的。
简化之后问题就是如何快速求树上两点之间的路径最小的边权。
直接算$lca$吧,在算$2^i$的祖先的同时可以顺便求一下某个点与它祖先之间的路径的最小边权。
最后对于询问的两点,就求$lca$,在求$lca$的同时也求路径上最小的边权。
Code
|
|