码迷,mamicode.com
首页 > 其他好文 > 详细

树形dp

时间:2018-11-06 22:27:23      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:air   ast   com   ***   splay   complex   技术   play   距离   

 

这里是主要的公式,可以这样理解:所有点到父亲节点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) << "\n" 
45 #define endl "\n"
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

标签:air   ast   com   ***   splay   complex   技术   play   距离   

原文地址:https://www.cnblogs.com/klaycf/p/9918233.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!