题目链接:http://codeforces.com/contest/1092/problem/F
寻找一个点,使得这个点到其他所有点的距离乘点权的和最大。
考虑把点权和*距离拆分成两部分,一部分是当前点的所有子孙到当前点的距离,另一部分是其余点到当前点的距离。固定一个树根,第一部分可以dfs一遍更新过来,维护当前距离和以及所有点的权值和,每次更新时去掉当前点的权值。
第二部分由某点的父亲节点更新过来,稍微计算一下计数的公式就行了。
1 |
|
Keep going
题目链接:http://codeforces.com/contest/1092/problem/F
寻找一个点,使得这个点到其他所有点的距离乘点权的和最大。
考虑把点权和*距离拆分成两部分,一部分是当前点的所有子孙到当前点的距离,另一部分是其余点到当前点的距离。固定一个树根,第一部分可以dfs一遍更新过来,维护当前距离和以及所有点的权值和,每次更新时去掉当前点的权值。
第二部分由某点的父亲节点更新过来,稍微计算一下计数的公式就行了。
1 | #include<bits/stdc++.h> |