本题思路和 这题 是一样的,
只不过加了边权和点权。我们需要再开一个记录点权的数组, 用sum记录点权总和
换根过程:dp[child=dp[rt]+w*(sum-2*size[child]) w为rt 、child的边权,size[i]表示以i为根的树的总点权。
//#pragma comment(linker, "/STACK:102400000,102400000")//手动扩栈
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<math.h>
#include<set>
#include<unordered_map>
using namespace std;
#define LL long long
#define ULL unsigned long long
const int INF=0x3f3f3f3f;
const double eps=1e-5;
const int maxn=1e5+7;
struct