$\large{先说好,因为本人比较菜,只能口胡一下板子了,有什么优(毒)秀(瘤)的题后期再更吧……}$
淀粉质,是一种很好吃的高能量食品,但如果不及时消化,就会消化不良(大雾)
首先考虑一下,不管怎么做,总要从脑袋到脚,跑个树高,而这又是个无根树
于是我们就抛出了我们树的重心:
- 利用$DFS$找到每个节点下面子树的大小(包括自己),同时用整棵树的大小减去这个值求出这个节点另一边的大小(不理解的话可以画图理解一下QQwQ)
如上图,当我们在计算$2$节点时会计算其子树大小(为4),并用总数减子树大小(为6),再取$max$
像这样不停的找一个两边比较平衡的节点就可以找到中心,代码如下:
inline void FocFind(int pos,int fa) { maxn[pos]=0;size[pos]=1; for(int i=head[pos];i;i=edge[i].next) if(!vis[edge[i].to]&&edge[i].to!=fa) { FocFind(edge[i].to,pos); size[pos]+=size[edge[i].to]; maxn[pos]=max(maxn[pos],size[edge[i].to]); } maxn[pos]=max(maxn[pos],sum-size[pos]); if(maxn[foc]>maxn[pos]) foc=pos; }
(初始化我就不写了,反正很水)
原文:https://www.cnblogs.com/wo-shi-zhen-de-cai/p/10463378.html