题意:给定两棵 个节点的树 。
你需要对
执行若干次操作,每次操作选择一个叶子节点,删除连接这个叶子的边,并将这个叶子节点连向任意一个另外的点。每个点只能被选择一次。
求使得
标号对应相同的最小的操作次数。 或指出无解。
多组数据,,,时限 。
首先查看这两棵树是否已经相同。
若不相同,随便枚举一步操作(共 种可能),假设操作了节点 ,接下来节点 就不能动了,不妨将其看作根。
变成有根树有一个很大的好处 : 每个点都有父亲了。
记 为 在 树中的父亲, 类似。
显然, 点需要操作。
而且,对 点的操作一定是先断开
,再连上
。
此时不能再选择 ,所以需要保证 已经处理好。即 的处理时间晚于 。
此外,在 树上也显然有 的处理时间晚于 ,因为要先把儿子挪走,父亲才有可能称为叶节点。
根据上述约束跑拓扑排序,若无解显然不合法,有解说明合法。
若 需要操作,才建边 。
若 两者都需要操作则连边
。若 需要操作但 不需要,则无解。
复杂度 。