【XJOI】path 题解

题目出自学军中学
(我不记得题目叫什么名字了,这个题目是我乱起的)

题目大意

  给出一幅 nn 个点的有向图,边长是 11
  求最大的 kk,使得对于任意正整数 LLL<=L<=图中最长路径的长度),长度为 LL 的路径数是 O(Lk)O(L^k) 的。若不存在则输出 -1。
  n105n \le 10^5

这是一道读题题

  读懂题就会做了

题解

  题目的意思是,对于任意长度 LL,其方案数必须是一个多项式,最高次<=k<=k

  首先如果图中存在一个复杂环(就是存在环套环的意思),那么这里能贡献的方案数就是指数级别的了(走一下 A 环,再走一下 B 环,再走一下 A 环……),所以输出 -1。

  于是就变成了一个只有简单环的图。我们缩点得到一幅 DAG。
  对于 DAG 上的某一条路径,有些点原来是环,假设有 xx 个这样的点。我现在走这条路径,假设这些环点我分别走了 c1c2cxc_1、c_2、……、c_x 次。
  考虑这条路径对长度 LL 的贡献,相当于我枚举 c1c2cxc_1、c_2、……、c_x,使得它们加起来是 LL。因此方案数是 O(Lx1)O(L^{x-1})

  因此在这个 DAG 上求一条点权最大的路径(若该点原来是环,点权就为 1,否则为 0),减 1 就是答案。