博客
关于我
树的深度———树形DP
阅读量:440 次
发布时间:2019-03-06

本文共 1684 字,大约阅读时间需要 5 分钟。

题目描述

 

 输入

 

 输出

 

 样例

样例输入

81 45 64 56 76 82 43 4
View Code

样例输出

7

分析

这道题数据有1000000,把每一个顶点都枚举一次显然不现实,肯定会T掉

所以,我们还是从图中找规律

按照习惯,我们先把1号节点作为根节点模拟一下

 

 我们可以很容易的通过一次dfs求出1号节点作为根节点时树的深度之和

1+2*3+3+4*2=18(当然,你把根节点的深度置为1也不会影响结果)

那么我们把根节点向下移到4好节点,我们可以发现什么呢

这时同把1作为根节点相比,1号节点的深度增加了1,但4所在的子树的节点的深度都减小了1

同样地,我们再把根节点下移到5,这时同把4作为根节点相比,1、4、3、2号节点的深度增加了1,但5所在的子树的节点的深度都减小了1

所以,我们设ans[i]为以i作为根节点时树的度数之和,siz[i]为以i为根子树的大小

那么ans[i]=ans[fa]+n-siz[i]-siz[i]=ans[fa]+n-2*siz[i]

siz数组我们可以预处理得到,ans[fa]我们也可以由ans[1]求得,所以,这道题就迎刃而解了

代码

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 const int maxn=2000010; 8 typedef long long ll; 9 struct asd{10 ll from,to,next;11 }b[maxn];12 ll head[maxn],tot=1,n;13 void ad(ll aa,ll bb){14 b[tot].from=aa;15 b[tot].to=bb;16 b[tot].next=head[aa];17 head[aa]=tot++;18 }19 ll dep[maxn],ans[maxn],siz[maxn];20 void dfs(ll now,ll fa){21 dep[now]=dep[fa]+1;22 siz[now ]=1;23 ans[now]=dep[now];24 for(ll i=head[now];i!=-1;i=b[i].next){25 ll u=b[i].to;26 if(u==fa) continue;27 dfs(u,now);28 siz[now]+=siz[u];29 ans[now]+=ans[u];30 }31 }32 void dfs2(ll now,ll fa){33 for(ll i=head[now];i!=-1;i=b[i].next){34 ll u=b[i].to;35 if(u==fa) continue;36 if(u!=1){37 ans[u]=ans[now]+(n-siz[u])-siz[u];38 }39 dfs2(u,now);40 }41 }42 int main(){43 memset(head,-1,sizeof(head));44 scanf("%lld",&n);45 for(ll i=1;i
tot){57 tot=ans[i];58 jll=i;59 }60 }61 printf("%lld\n",jll);62 return 0;63 }
View Code

 

转载地址:http://uopyz.baihongyu.com/

你可能感兴趣的文章
Netty工作笔记0011---Channel应用案例2
查看>>
Netty工作笔记0012---Channel应用案例3
查看>>
Netty工作笔记0013---Channel应用案例4Copy图片
查看>>
Netty工作笔记0014---Buffer类型化和只读
查看>>
Netty工作笔记0015---MappedByteBuffer使用
查看>>
Netty工作笔记0016---Buffer的分散和聚合
查看>>
Netty工作笔记0018---Selector介绍和原理
查看>>
Netty工作笔记0019---Selector API介绍
查看>>
Netty工作笔记0020---Selectionkey在NIO体系
查看>>
Netty工作笔记0021---NIO编写,快速入门---编写服务器
查看>>
Netty工作笔记0022---NIO快速入门--编写客户端
查看>>
Vue踩坑笔记 - 关于vue静态资源引入的问题
查看>>
Netty工作笔记0024---SelectionKey API
查看>>
Netty工作笔记0025---SocketChannel API
查看>>
Netty工作笔记0026---NIO 网络编程应用--群聊系统1---编写服务器1
查看>>
Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
查看>>
Netty工作笔记0028---NIO 网络编程应用--群聊系统3--客户端编写1
查看>>
Netty工作笔记0030---NIO与零拷贝原理剖析
查看>>
Netty工作笔记0032---零拷贝AIO内容梳理
查看>>
Netty工作笔记0033---Netty概述
查看>>