关于最长链

来源:互联网 发布:4g网络覆盖 编辑:程序博客网 时间:2024/05/14 03:43

昨天晚上突然想到一个问题:

对于一个给定的有向图,给定起点,求一条最长链

我一开始觉得这个问题比较简单,但是想了半天也不会做,颓然发现它可能比较难……

如果这个图是个topo图,那么可以DP或者SPFA来做

如果不是呢?也就是说这个图存在环的话呢?

如果每条边可以走多次,那么显然最长链不存在

否则这个问题有两种版本

一种是不允许经过重复的边,可以经过重复的点//2011.12.18修改,这样就不叫最长链了,叫最长迹……

第二种是不允许经过重复的点


今天问了pty和zzx,pty提出可以用类似费用流中的消圈算法解决

在这个问题中,环相当于最短路中的负环,消圈算法就是解决费用流中存在负环的情况,使得即使存在负环,仍然能求出最小费用路,那么套用到这里也是一样的

可是消圈算法一般的OIer根本不会去写,因为效率没有一般的SPFA最小费用流或者zkw费用流高

而且出现负环的情况一般不多见,可这个问题确确实实是有可能考到的,因此实际上并没能真正解决

而且消圈算法只能解决不允许经过重复点的情况(网络流中经过了一个环等于没流),第一种情况没能解决


中午将这个问题推广到不给定起点,求任意一条最长链

发现可以用floyd,因为floyd保证不会出现环,这样之前提到的给定起点的情况二在不使用消圈算法的情况下也能得到解决,虽然时间复杂度有点高


至此情况一始终没能解决……


原创粉丝点击