AtCoder Regular Contest 107 C - Shuffle Permutation
算法
容易发现行列的交换操作互不影响
又因为如果 \(a \leftrightarrow b, b \leftrightarrow c\)
那么显然 \(a \leftrightarrow c\)
由此想到把所有交换操作维护连通块, 对于每个连通块内的点, 总方案数就是块大小的阶乘
证明
块中可通过操作取到任意排列
于是得证
代码
略, 十分好写, 节约的时间拿去写分块
总结
交换类的题目, 可以用连通块维护变成排列组合的题目
事实上对于任何有此性质的运算都可以
如果一道题看起来像是概率计数但是没法做
可以考虑在什么条件下可以转化成任意排列的问题

浙公网安备 33010602011771号