牛半仙的妹子树(牛客网2020-普及组第三场T3) 题解 (人生中第一道换根dp)
1.前言
我改了好久
2.分析
我们先令一个根节点(1),则这棵树变成了一个棵有根树
我们将(旪)超能力对i的磁场强度分为两种
(1):不在以i为根节点的子树内的妹子影响Ta
(2):在以i为根节点的子树内的妹子影响Ta
我们先处理旪超能力的妹子的磁场强度
我们先定义几个变量
disx_u表示向上的旪超能力节点磁场强度和
disx_d表示向下的旪超能力节点磁场强度和
numx_d表示向下的旪超能力节点的个数
numx_u表示向上的旪超能力节点的个数
则
disx_d[u] += disx_d[v] + numx_d[v];
//以v为根节点的子树上的有旪超能力的妹子距离u的距离总和
//加上以v为根节点的子树上的有旪超能力的妹子的数量
numx_d[u] += numx_d[v];
重头戏来了
numx_u[v] += numx_u[u] + numx_d[u] - numx_d[v];
disx_u[v] += disx_d[u] - (disx_d[v] + numx_d[v]) + (numx_d[u] - numx_d[v]) + disx_u[u] + numx_u[u];