接下來咱們把整道題的主要思路簡要地梳理開來。spa
首先,咱們先考慮最經典的問題(這經典嗎???):get
旅行商問題class
不,是與之相似的一類問題:給一堆點(有順序要求),要求有多少種方案數使這 \(n\) 個點構成一張連通圖(無自環、重邊)。方法
該問題能夠經過一下方法解決:總結
考慮補集轉化思想,將求全部的連通圖的方案轉化爲全部圖的方案\(-\)非連通圖的方案。集合
咱們能夠定義一個 \(dp(S)\) 表明最終答案( \(S\) 表明點集,下同),\(f(S)\) 表明非連通圖的方案,\(g(S)\) 表明總方案數。di
很顯然,在該集合中全部的點構成的徹底圖的的子圖個數是總方案數。co
而對於非連通圖而言,咱們能夠將點集中的點分爲兩部分——一部分爲連通圖、另外一部分瞎搞,只要這兩部分互相不連通就能夠了。display
只不過爲了不重不漏,咱們能夠對於任意一個點,考慮它所在的連通圖的節點個數進行計數。math
最後咱們有:
回到這道題,咱們能夠仿照剛纔的想法,補集轉化去作。只不過咱們這裏的總方案數並非2的整數次冪,而是每條邊種數加一後,全部數的乘積後的結果。
對於補集而言,仍然選任意一個點進行分狀況計數便可。
最後不用卡常就過了。
總結:
經典狀壓問題的變形;
補集轉化。