给一棵n个结点的树,m条路径的起点和终点,
问至多可以选择多少条路径使其两两间没有公共点。
这题的主要问题是,
1、如何判断两条路径上没有交点
2、按什么策略来选
看上去感觉是最大匹配问题,但nm的范围较大问题1无法高效的解决。
画个图发现可能和LCA有关,但比赛时不知道这到底有什么用,完全没想贪心。
要选择尽量多,就是要尽量避免冲突。
我们选择一个点作为根,把给的边画出来建树就可以发现,尽量选深度大的路径可以使冲突尽量小。
于是把路径按LCA深度由大到小排序,依次和之前不冲突就可以选。
下面就是判断两条路径上有没有交点,
当一条路径选了之后,以其LCA的子树上的点为起点或终点的路径一定与其有交点。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include