笑点解析:NOIP 模拟赛把这题放在 T3。
因为每一个点只能动一次,答案一定 \(\le n\),所以我们分两种情况讨论:
当答案小于 \(n\)
答案如果小于 \(n\),那么一定有一个点是一直没有被动过的。我们枚举这个点,将无根树转化为两棵以这个点为根的有根树。
我们将第一棵树和第二棵树同构的部分标记,一个未被标记的节点可以被移动,当且仅当它是第一棵树上的叶子节点,并且它在第二棵树上的父亲已经被标记。直接拓扑排序解决,如果没有点能移动了且两棵树还是不同构,那就无解,反之有解。一次拓扑排序的时间复杂度为 \(O(n)\),总复杂度就是 \(O(Tn^2)\) 的。
当答案等于 \(n\)
存在一个点不会被操作的性质没有了,其解决办法也很简单:任选一个第一棵树上的一个叶子 \(x\),并将其移动到任意一个节点上(相当于进行了一次操作),这样就转化为上面的情况了。因为 \(x\) 已经被移动过了,一定不会再动一次,所以以 \(x\) 为根再跑上述拓扑排序即可。
枚举第一次操作的复杂度为 \(O(n^2)\),总复杂度 \(O(Tn^3)\)。
标签:一个点,题解,复杂度,一棵树,节点,AGC027F,排序,拓扑,Grafting From: https://www.cnblogs.com/11-twentythree/p/18403684