
树的重心
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Codeforces - Link Cut Centroids
题目链接:Codeforces - Link Cut Centroids如果只有一个重心,直接删一条边再加上即可。否则,最多两个重心,并且相邻。并且去除重心后产生的最大联通块都为:n/2所以我们以任意一个重心为根,另一个重心肯定是当前重心的重儿子,我们随便删掉一个重儿子的儿子即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long lo原创 2020-09-15 11:50:28 · 181 阅读 · 0 评论 -
Codeforces - Kay and Snowflake
题目链接:Codeforces - Kay and Snowflake有一个很重要的点:一个子树的重心,只会在本身或者重儿子当中产生。所以先判断当前点能否作为重心,然后不然,就从重儿子的重心往上面跳。由于重心只会往上跳,所以跳的次数是线性的。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bi...原创 2020-01-31 21:52:10 · 396 阅读 · 0 评论 -
树的重心
定义及性质定义1:找到一个点,删除它得到的森林中最大的子树节点数最少(也就是最大的连通块的点数最小),那么这个点就是这棵树的重心。定义2:删除重心后得到的所有子树,其顶点数必然不超过n/2性质1:树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。性质2:把两个树通过一条边相连得到一个新的树,那么新的树的重心在连接原来两个树的重心的路径上。性质3:...原创 2019-08-13 11:16:54 · 202 阅读 · 0 评论