若$k\leq 15$,那么可以设$d[i][S]$表示经过了$S$集合的边,现在位于$i$点的最短路. 可以用Dijkstra算法在$O(n^22^k)$时间内求出. 否则若$k>15$,那么最坏情况下,它们会形成一个团,将这$k$条边连上后,图中最多剩下$7$个连通块. 如果知道哪些边要走,哪些边不走的话,那么只要存在欧拉回路就可以. 也就是说,所有点的度数都是偶数,且从$1$出发可以到达$k$条边的端点. 于是考虑DP,设$f[i][j][k]$表示考虑前$i$条边,目前连通性为$j$,每…