树形dp

Posted klaycf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树形dp相关的知识,希望对你有一定的参考价值。

 

这里是主要的公式,可以这样理解:所有点到父亲节点u的距离和sall[u]已经算出来了,
那么算v这个节点的时候,不在v子树范围内的点到v的距离都多了1,
所以加上n-sz[v],v的子树的点到v的距离都减少了1,所以要减去sz[v].

技术分享图片
 1 /*************************************************************************
 2     > File Name: a.cpp
 3     > Author: QWX
 4     > Mail: 
 5     > Created Time: 2018/11/6 17:43:14
 6  ************************************************************************/
 7 
 8 
 9 //{{{ #include
10 #include<iostream>
11 #include<cstdio>
12 #include<algorithm>
13 #include<vector>
14 #include<cmath>
15 #include<queue>
16 #include<map>
17 #include<set>
18 #include<string>
19 #include<cstring>
20 #include<complex>
21 #include<cassert>
22 //#include<bits/stdc++.h>
23 #define vi vector<int>
24 #define pii pair<int,int>
25 #define mp make_pair
26 #define pb push_back
27 #define fi first
28 #define se second
29 #define pw(x) (1ll << (x))
30 #define sz(x) ((int)(x).size())
31 #define all(x) (x).begin(),(x).end()
32 #define rep(i,l,r) for(int i=(l);i<(r);i++)
33 #define per(i,r,l) for(int i=(r);i>=(l);i--)
34 #define FOR(i,l,r) for(int i=(l);i<=(r);i++)
35 #define cl(a,b) memset(a,b,sizeof(a))
36 #define fastio ios::sync_with_stdio(false);cin.tie(0);
37 #define lson l , mid , ls
38 #define rson mid + 1 , r , rs
39 #define INF 0x3f3f3f3f
40 #define LINF 0x3f3f3f3f3f3f3f3f
41 #define ll long long
42 #define ull unsigned long long
43 #define dd(x) cout << #x << " = " << (x) << "," 
44 #define de(x) cout << #x << " = " << (x) << "
" 
45 #define endl "
"
46 using namespace std;
47 //}}}
48 
49 
50 const int N=1e5+7;
51 int n,m,siz[N],fa[N][20],dep[N];
52 ll sdown[N],sall[N];
53 
54 void dfs(int u,int f)
55 {
56     siz[u]=1;
57     sdown[u]=0;
58     for(auto v:G[u]){
59         if(v==f)continue;
60         dep[v]=dep[u]+1;
61         fa[v][0]=u;
62         dfs(v,u);
63         siz[u]+=siz[v];
64         sdown[u]+=sdown[v]+siz[v];
65     }
66 }
67 void dfs2(int u,int f)
68 {
69     for(auto v:G[u]){
70         if(v==f)continue;
71         sall[v]=sall[v]+n-2*siz[v];
72         dfs(v,u);
73     }
74 }
75 void Init()
76 {
77     dfs(1,-1);
78     sall[1]=sdown[1];
79     dfs2(1,-1);
80     FOR(j,1,20)FOR(i,1,n)fa[i][j]=fa[fa[i][j-1]][j-1];
81 }
82 int main()
83 {
84     
85 }
View Code

 



以上是关于树形dp的主要内容,如果未能解决你的问题,请参考以下文章

Starship Troopers(HDU 1011 树形DP)

HDU1520 Anniversary party(树形dp入门题)

[填坑][支线任务]树形DP 树形背包

hdu1561 树形dp+背包

BZOJ_1060_时态同步_树形DP

HDU 1520 Anniversary party (树形DP)