题目描述
在Byteland 一共有n 个城市,编号依次为1 到n,它们之间计划修建n(n-1)/2条单向道路,对于任意两个不同的点i 和j,在它们之间有且仅有一条单向道路,方向要么是i 到j,要么是j 到i。换句话说,这是一个n 个点的竞赛图。
Byteasar 居住在1 号城市,他希望从1 号城市出发,沿着单向道路不重复地访问一些城市,使得访问的城市数尽可能多。
请写一个程序,帮助Byteasar 计算有多少种道路修建方式,使得从1 号点出发的最长简单路径经过点数恰好为k,由于答案可能很大,请对P 取模输出。
结论
首先题目这种图称为竞赛图,那么有两个结论。
强联通竞赛图一定存在哈密顿回路。
考虑归纳法证明。
n=3显然正确。
n=k正确时,n=k+1也正确。
若第k+1个点对于前k个点,只有一种方向的边,是不满足强联通的。
否则,对于原来一条哈密顿回路v1,v2……vk,v1。
一定能找到一个i,使vi与第k+1个点连边与vi+1与第k+1个点连边方向不同。那么如果vi连向第k+1个点,vi+1被第k+1个点连向,于是一条新的哈密顿回路产生。
如果不存在上述情况,一定可以走到vk后走到第k+1个点,再走到v1,也是一条哈密顿回路。
所以得证。
竞赛图缩点后会形成一条主链(即保留一些边可以使得缩点后的点连成一条链)
两两点间都有连边。显然按照拓扑排序可以得到一条主链。
这两个结论证明了1走出的最长哈密顿路径等于缩点后1所在连通分量及其主链后点的总数。(对于每个连通分量可以走一条哈密顿回路,然后往下一个联通分量走)
DP
设f[n]表示n个点带标号竞赛图数量,显然是 2n∗(n−1)/2
设g[n]表示n个点带标号强联通竞赛图数量,则容易容斥计算。