P4778 Counting Swaps题解

感谢洛谷上这一篇题解对我的启发,本文也可看作是对其的补充说明

对通项\(f_n=n^{n-2}\)的证明

本题前面的思考过程其他题解已经解释的很详尽了,这里主要解释下通项公式的推导

从结论看,我们发现这个式子与有标号无根树的个数相同,于是我们尝试在操作方案与有标号无根树之间建立双射

设环的节点数为\(n\),一开始,树\(T\)中仅有\(n\)个点,当我们交换\(x, y\)时,就在\(T\)中加入一条边\((x, y)\),那么进行完\(n-1\)
操作后,我们便可以得到一颗无根树\(T\),证明只需简单归纳一下即可

但是,两个操作顺序不同的交换方案会得到同一棵树,如(因为此题中排序与环上交换是等价的,此处用序列排序的方式举例)

\[2341 \xrightarrow{\text{swap} (1, 3)} 2143 \xrightarrow{\text{swap} (1, 2)} 1243 \xrightarrow{\text{swap} (3, 4)} 1234 \\ 2341 \xrightarrow{\text{swap} (1, 3)} 2143 \xrightarrow{\text{swap} (3, 4)} 2134 \xrightarrow{\text{swap} (1, 2)} 1234 \]

两种方案都会得到下面的树
树

因此,我们发现树的边是有顺序的,那么,这样的树共有\(n^{n-2}(n-1)!\)种,但是,合法的操作并不能得到所有的树。

这时,我们反过来考虑,如果我们按照一棵树边的顺序执行交换操作,那么我们是不是一定能得到一个环呢?
答案是肯定的,当树中仅有两个节点时,即仅有一条边时,命题显然成立,用归纳法,假设节点个数为\(1\sim k-1\)时命题成立
节点数为\(k\)时,我们可以在树中任选一条边作为最后交换的点对(数对)那么删去它后,树会变成两棵,根据假设,这两棵树的操作顺序是任意的,当两棵树分别交换完之后,我们再交换最开始选的一对点,他们一定分别在两个环中,则交换后一定能形成一个大环

所以,这\(n^{n-2}(n-1)!\)棵树每一棵对应的操作都能将\(n\)个自环变为一个大环。
但是,这个大环不一定是我们需要的。
我们的目标是\(1 \rightarrow 2 \rightarrow 3 \rightarrow \cdots \rightarrow n-1 \rightarrow n \rightarrow 1\),即按递增的顺序构成一个环。
但是有些树并不一定得到它,而这些不同环的数目应该等于\(n\)个数的圆排列个数,即\((n-1)!\)
显然,每个环变成自环的方案数是相同的,与环上数的顺序无关,故其中一个环的方案数为\(\frac{n^{n-2}(n-1)!}{(n-1)!}=n^{n-2}\)

于是,就有\(f_n=n^{n-2}\)

posted @ 2025-09-08 11:00  zhm0725  阅读(24)  评论(0)    收藏  举报