題面傳送門
顯然題目相當於最小割計數。
考慮一個最大匹配,則一條匹配路徑 \((S,x),(x,y),(y,T)\) 三條邊中肯定要割一條邊掉。因此一個暴力做法是列舉割哪條,然後看 \(S\) 和 \(T\) 是否聯通。
考慮一條不在最大匹配上的邊 \((u,v)\),若 \(u\) 不在最大匹配中,則 \((v,T)\) 必須割,若 \(v\) 不在最大匹配中,則 \((S,u)\) 必須割,否則 \((S,u),(v,T)\) 必須割一條。
抽象一下,每個點可以選 \(0,1,2\),限制是某個點必須選某個數或者 \(u=0,v=2\) 至少要滿足一個。
直接折半可以做到 \(O(3^{\frac{n}{2}}\operatorname{poly}(n))\),但是不牛。考慮一條依次經過匹配邊和非匹配邊的環,則經過的所有匹配邊都不能選,並且所有的匹配選的數要相同,因此可以縮點,然後對於一個限制 \((u,v)\),從 \(u\) 所在的匹配連向 \(v\) 所在的匹配就是一個 DAG。
跑出這個 DAG 的一個拓撲序,這樣就只有前面的點對後面的點有限制,限制形如某個點是否必須選 \(2\)。
現在直接搜尋就是 \(O(2^n)\) 的,因為當我們搜到某個位置並確定這個位置的 \(2\) 能不能選的時候,這個位置的 \(2\) 和 \(1\) 是等價的,因此每個點只需要搜尋 \(2\) 種情況。
直接記憶化,前 \(\frac{n}{2}\) 步是 \(O(2^{\frac{n}{2}}n)\) 的,後 \(\frac{n}{2}\) 步因為限制只有 \(2^{n-i}\) 種,所以也是 \(O(2^{\frac{n}{2}}n)\) 的。
可以去掉 map 做到 \(O(2^{\frac{n}{2}})\),但是實測前面的跑得更快,感性上 map 其實去除了更多的無用狀態,前面 \(\frac{n}{2}\) 的搜尋如果在同一個聯通塊中肯定有比較強的限制,複雜度應該是低於 \(O(1.414^n)\) 的。
submission