题解
对每个节点开一个树状数组维护前缀最大值(即区间$[1,n]$的最大值)BIT[i][j]
表示存在一条指向$i$点的路径,路径中最后一个边的权值为$j$
那么对每条边$u,v,w$,查询指向$i$的路径中,最大权值不超过$w-1$,长度最大的路径的长度(即BIT[u][w-1]
),再加一即为以$v$结尾,最大权值为$w$的路径的长度,同时把这个值更新到BIT[v][w]
中,因为是按读入边的顺序处理的,所以可以满足边的编号递增的条件,查询的最大值即为答案。
注意直接开所有的树状数组内存是不够的,使用map
就可以了
代码
1 | //4 24 |