先求每个点子树内的同色连通块个数。令 dpu 表示以 u 为根的子树中同色连通块的数量。初始 dpu=1(u 自己构成一块)。对每个儿子 v:
[ dp_u \leftarrow dp_u + dp_v - [color_u = color_v] ]
即若 u 与 v 同色,则 v 所在连通块与 u 合并,块数减一;否则直接拼上 v 的所有块。
有一棵 n 个节点的无向树。每个节点被涂成两种颜色之一:字符 R 或字符 B。
删掉树上任意一条边后,树会分成两棵子树。在一棵子树中,颜色相同且通过子树内部边相连的节点构成一个同色连通块。
定义一条边的权值为:删掉该边后,两棵子树的同色连通块个数之差的绝对值。请计算树上所有边的权值之和。
约束条件:
R 和 B 组成。1 到 n 之间。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.