闲话:
赛时想了半天都没有想出来,赛后看了一下非递减才想出来
题意
我们要求一个从 \(1\) 到 \(n\) 的路径,这个路径上点的点权组合成一个数列,这个数列得是非递减的,求这个数列不同整数个数。
分析
很明显,我们要求出一个非递减的路径,那么舍弃掉 \(a_u > a_v\) 的边,因为这些边对答案没有任何贡献。
再看题目,发现我们要求出不同数的个数,因为有 \(a_u = a_v\) 的边,考虑缩点, 将 \(a_u = a_v\) 的边缩成一个点,这一点内包含的所有点的点权都相同。
缩点完整张图就变为 DAG,直接跑一个 DAGdp 就行了,时间复杂度是 \(O(n + m)\) 的。
注意舍弃 \(a_u > a_v\) 的边是在缩点完再舍弃啊!!