首页 > 其他分享 >CF708C Centroids

CF708C Centroids

时间:2023-11-01 09:12:40浏览次数:26  
标签:lfloor CF708C 重心 Centroids 子树 rfloor 一棵

对于一个不是重心的点 \(u\),它必定有一棵子树 \(T\) 包含所有重心(如果有两个重心则它们必定相邻),显然 \(|T|>\lfloor\frac{n}{2}\rfloor\),这阻碍了它成为重心。贪心地想,我们要在 \(T\) 中找出一棵子树 \(S\) 使得 \(|S|\leq\lfloor\frac{n}{2}\rfloor\) 且 \(|S|\) 尽可能大,然后将 \(S\) 割掉接在 \(u\) 上。

其次 \(S\) 肯定是重心的某棵子树(分一个重心和两个重心讨论下),且肯定是重心最大或次大的子树,因为 \(u\) 最多只能被包含在其中的一棵子树中。

那么就很简单了,最多两个重心,最多四种选择,选最大且不包含 \(u\) 的割,判断是否合法即可。

可以用 DFS 序的左右边界以及是子树内还是子树外来表示无根树的一棵子树。

标签:lfloor,CF708C,重心,Centroids,子树,rfloor,一棵
From: https://www.cnblogs.com/landsol/p/17802259.html

相关文章

  • Two Centroids
    TwoCentroids先考虑对于一棵树,至少要加多少个点才能有两个重心。以重心为根,设最大儿子的子树大小为\(mx\),那么答案就为\((n-mx)-mx=n-2mx\)。接下来考虑如何在加点时维护最大子树,一个显然的性质,加一个点重心最多偏移一位,如果重心偏移,那么\(mx=\lfloor\frac{n}{2......
  • CF708C Centroids 换根dp
    CF708CCentroids一道换根DP。我们可以先找出树的一个重心,那么对于其他所有不是重心的点,它不能成为重心时因为它父亲的那一支节点数大于一半,而可以改造成功,则意味着可以在他父亲那一支里,可以找到子树u,使$siz[u]\len/2$&&$siz[fa]-siz[u]\len/2$。简而言之,就是对于每个......
  • AIM Tech Round 3 (Div. 1)-C. Centroids
    原题链接C.CentroidstimelimitpertestmemorylimitpertestinputoutputTree isaconnectedacyclicgraph.Supposeyouaregivenatreeconsistingof n vertices.Thevertexofthistreeiscalled centroid......
  • CodeForces 1827 D Two Centroids
    洛谷传送门CF传送门考虑固定一个重心,设\(k\)为重心最大子树大小,答案为\(n-2k\)。构造方法是往最大的子树塞叶子。树的重心有一个很好的性质,就是加一个叶子,重心最多移动一条边的距离。简单证一下,设重心为\(x\),往儿子\(u\)的子树中加叶子。如果\(sz_u>\left\lfloor......
  • CF708C Centroids(换根dp)
    题意:给定一颗树,你有一次将树改造的机会,改造的意思是删去一条边,再加入一条边,保证改造后还是一棵树。请问有多少点可以通过改造,成为这颗树的重心?(如果以某个点为根,每个子树的大小都不大于\(\dfrac{n}{2}\),则称某个点为重心)思路:是今天遇到的一道有意思的换根dp呃呃。从题意来看......
  • CodeForces - 708C Centroids
    题意:给出一棵有n个结点的树,对于每一个结点,如果任意删除一条边后再任意添加一条边能使这个结点成为这棵树的重心,则输出1;反之输出0。解:重心的特点:以重心为根节点时,其最大子......