题意
给一颗树,求一条路径的值是路径上点的种类数,求$n*(n-1)/2$条路径值的总和
容易想到分别每个种类的贡献,但是如图一个种类的贡献不好求。不如求所有路径不经过此种类点的路径数。
如图我们要求没经过红点的路径数
然后比赛中我陷入如何找联通块的无线死循环
每当我们更新$c[color],通过c[color]-c[color]_{last}就可以知道c[u][color]$
然后为了减低空间复杂度,显然可以一边遍历一边更新$c[color]$,而做完一边所有儿子的的更新就要把自己也加到父亲的$c[color]$,最后要再总的统一一边
代码
1 |
|