将加边变为加点,方案数为 \((n-1)!\) 除以一个数,\(dp\) 每种方案要除的数之和即可。
显然,无论在什么情况下,最优解都是一条链,而且每个点的滑稽度不小于所有点的 \(\text{and}\) 之和,因此可以设 \(dp[s]\) 表示拉出一条链,使得链的最下面一个点的滑稽度为 \(s\) 的最小代价,暴力枚举转移是 \(O(n\times a)\) 的,实际上转移时只需要枚举子集,判断是否有点的权值与 \(S\) 与 \(T\) 的差集无交即可,时间复杂度 \(O(3^{\log a})\)
可以发现最优摆放方式一定是最小值和次小值一个放左上角一个放右下角,上面升序排列,下面倒序排列。最优行走路线要么将上面一行走完,要么将下面一行走完。
背包算出将最小值和次小值去除后的所有可能,取最优结果即可。
将路径拆成三个部分,两边哈希,中间 \(dp\) ,需要特判长度为 \(1\) 和 \(2\) 的部分。