做法一
定义 dps,i,0/1 表示当前走过的桥的状态是 s,最后一次路过的桥是 i,0/1 表示最后一次过桥的方向(ui→vi 或者 vi→ui)。转移时先枚举一座 s 中的桥 x,从去掉该桥的状态中再枚举一个最后一次路过的桥 y,由 dps−2x,y,0/1 转移即可。
时间复杂度为:O(n3+m+q⋅2k⋅k2)。
Submission #57315524 - AtCoder Beginner Contest 369
做法二
全排列枚举过桥的顺序,然后模拟即可。但大部分人都又套了一个 O(2k) 的状压,实际上没有必要。与做法一类似,记录上一次过桥的方向及答案即可做到 O(n3+m+q⋅k!⋅k)。
Submission #57335924 - AtCoder Beginner Contest 369