最长路径

题目描述

在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(n1)/2
设g[n]表示n个点带标号强联通竞赛图数量,则容易容斥计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值