- wangweikun2024's blog
好吃的
- @ 2026-10-13 15:20:28
题目描述
给定两棵均包含 个节点的无根树 ,节点编号均为 。
现在需要通过一系列“等价交换”操作将 变成 。
一次“等价交换”操作定义如下:
- 在当前的树中选择两条没有公共端点的边 和 。将这两条边删去。此时树会被断开成三个独立的连通块。你需要加入两条新的边,这两条新边的端点必须全部来自于集合 。
- 要求:加入新边后,整个图必须重新成为一棵连通的树。新边边集不得为 。新边可以共端点。
现在需要构造一种操作方案,使树 的边集完全变为 的边集,或者告知不存在合法的操作方案。
注:本题中的树均为无向简单图。“等价交换”加入操作的两条边必须互不相同,且不得与“等价交换”删除操作后仍然存在的边重合。
输入格式
本题输入输出量较大,请使用较快的输入输出方式。
请注意常数因子对程序运行的影响。
第一行,一行两个整数 ,分别表示子任务编号与树的节点个数(样例中 )。
接下来 行,每行两个整数 ,表示树 中存在一条连接 的边。
再接下来 行,每行两个整数 ,表示树 中存在一条连接 的边。
输出格式
如果不存在合法的操作方案,输出一行一个 。
否则,第一行输出一个非负整数 ,表示你的操作次数。
如存在合法操作方案且 ,则接下来 行,每行描述一次操作,即每行输出八个整数 ,表示你选择删去的两条边分别是 和 ,加入的两条边分别是 和 (注:一定需要满足 两两不同且 。任何边的两个端点都不可相同)。
输入输出样例 #1
输入 #1
0 4
1 2
2 3
3 4
1 3
3 2
2 4
输出 #1
1
1 2 3 4 1 3 2 4
说明/提示
数据范围
对于 的数据,保证 ,要求 。
保证对本题的所有数据,若 可以通过若干次交换转化为 ,则一定存在一个操作次数 的合法方案。
先考虑无解情况,显然菊花图的任意两条边都是相邻的,所以无法操作,此时若 ,输出 ,否则输出 。接下来的构造将说明,只要 不是菊花图,就可以在 次操作内转为任意 。
如果 是菊花图,将所有点依次挂到中心即可,以下讨论 不为菊花图的情况。
先选根 ,具体如何选会在后文讨论到,按照 的 dfn 序遍历节点,先遍历 的非叶儿子再遍历叶儿子。
对于节点 ,记 为 的当前父亲, 为 的目标父亲,若 ,无需操作,否则,若能找到 当前的一个邻居 ,就可以 ,相当于把 的子树从 接到 上,显然能维持树的结构,称以上为“普通处理”。
但问题在于,如果 只有一个邻居 ,找不到辅助边,就无法完成上述操作,为了解决这种情况,我们引入一类“特殊处理”。
如果节点 是当前叶子,取 的一个目标儿子 ,那么,希望在两步内接出 (如果 同时是目标叶子,普通处理即可),注意,这里可以保证 有辅助边,原因将在后面提到。我们记 为 的当前父亲,接下来进行分讨。
若 ,先把 接到 ,再 把 接到 即可。
若 ,注意此时有一条 的边,继续分讨。
若 ,直接 ,合法性比较显然。
若 ,考虑取辅助边 满足 且 ,然后 ,再 即可,简单解释一下:第一步是暂时把 接到 构造辅助边,第二步和上面那种情况基本相同。只要当前树不是菊花图,必然能找到这样的 。
接下来分析为什么所有已经接好父亲的节点 必然有辅助边:对于普通处理中接好的节点,会立马给其接上一个儿子(若为当前叶,则也为目标叶,跳过即可),而特殊处理中, 在处理后也接好了一个儿子,当然, 仍可能是当前叶子,但是, 此时唯二的邻居就是 和 ,而之后接到 的点显然是其目标儿子,故对于任意尚未接到其目标父亲的点,有其当前父亲不为 ,换句话说,在接 的儿子时, 必然能作为辅助边。
综上,可以在均摊一步内将一个点接到其目标父亲上,接下来,我们要选一个合适的根,使得树不会突变为菊花图或增加操作次数。
我们发现,如果已经构造好一条长度至少为 的链,那么树就不可能变成菊花图,记 ,注意,这里使用的是初始 的度数,由于 不为菊花图,,进行分讨。
若 且 为目标叶子,以 为根, 初始存在辅助边来接儿子,而且其只需要接一个儿子,不会造成阻碍,同时,其儿子必然存在一个目标非叶儿子,那么按照遍历顺序,开始就能接出长度为 的链。
否则,若 且其有目标叶儿子 ,仍以 为根,由于第一类不存在, 在 中也是叶子,若 已经存在,跳过,否则,记 的唯一邻居为 ,取 的一个孩子 ,做 就可以将 接到 ,然后正常处理即可,证明同第一类。
若前两类都不存在,取 中包含 所有点的最小子树 ,取 的一个叶子 ,显然 (不然 就被去掉了),取 的首个不属于 的儿子 ,再取 的首个儿子 (必然存在,否则满足第一/二类),先遍历不属于 的儿子,再遍历其他的,发现在处理前者时, 必然与 中的一点连接,记为 ,而处理不会影响 ,故其可以作为辅助边,同时,开始便接好了 的链,处理后者时,会直接将 的一个属于 的目标儿子 接到 ,保持 ,且在之后都能保证 有辅助边。
综上,我们讨论完了所有情况,构造部分到此结束。
发现这么做是有严格 的做法的,强于官解的 ,但码长有点非人,就不写了。