
本文共 1862 字,大约阅读时间需要 6 分钟。
������������������������������������������������������������������������������������������������������������������������
���������������������������������������������dp[i]���������������i������������������������sum[i]������i������������������������������������������������DFS������������������DFS���������sum������������������DFS���������ans������������������������������������������������������������������������ans[u]������������������ans[u]=dp[u]+(all-sum[u]) + (ans[p] - sum[u] - dp[u])������������������p���u���������������
���������������
#includeusing namespace std;#define int long longint a[N];int sum[N];int sum2[N];int ans[N];int all;int idx;int h[N], ne[N*2], e[N*2];void add(int a, int b) { e[idx] = b; ne[idx] = h[a]; h[a] = idx++;}void dfs(int u, int fa) { sum[u] = a[u]; sum2[u] = 0; for(int i = h[u]; ~i; i = ne[i]) { int j = e[i]; if(j == fa) continue; dfs(j, u); sum[u] += sum[j]; sum2[u] += sum2[j]; sum2[u] += sum[j]; }}void dfs2(int u, int fa) { for(int i = h[u]; ~i; i = ne[i]) { int j = e[i]; if(j == fa) continue; ans[j] = (all - sum[j] * 2 + ans[u]); dfs2(j, u); }}__attribute__((signed))int main() { memset(h, -1, sizeof(h)); cin >> n; for(int i = 1; i <= n; i++) { a[i] = ... } for(int i=0; i < n-1; i++) { int a,b; cin >> a >> b; add(a, b); add(b, a); } dfs(1, -1); ans[1] = sum2[1]; dfs2(1, -1); int res = 0; for(int i=1; i<=n; i++) { res = max(res, ans[i]); } cout << res << endl;}
������������������������������������������������������������������������������������������������������������������������������������������DFS������������������sum���������ans���������������������������������������������������������������������������������������������
发表评论
最新留言
关于作者
