首页 > 其他分享 >CF1467E Distinctive Roots in a Tree

CF1467E Distinctive Roots in a Tree

时间:2023-10-25 10:11:08浏览次数:41  
标签:结点 子树内 标记 Distinctive Tree 合法 子树外 权值 CF1467E

突然发现深究一些树上问题还是挺有意思的哈。

显然对于同一种权值的任意两个结点,其两端的部分都是不合法的。

维护两个标记表示子树内均不合法与子树外均不合法即可。但相同权值的点对数量是 \(O(n^2)\) 的,我们要优化这个过程。

发现很多点对都是无用的。DFS 下去,遇到一个 \(x\) 权值的结点 \(u\),其实只需要与上一个遇到的 \(x\) 权值的结点 \(v\) 做一下就好了,原因如下:

  • \(v\) 是 \(u\) 的祖先。\(u\) 与 \(v\) 子树外的结点做没有影响。
  • \(v\) 不是 \(u\) 的祖先。不经过 \(x\) 权值的结点直接走到 \(u\) 的除 \(v\) 外的结点一定已经做过了且它们与 \(u\) 做没有影响。

红色结点表示 \(x\) 权值的结点,蓝色结点就是 \(u\)。

画图就会发现这个结论太容易得出啦。

最后再来一次 DFS 处理所有标记。记一下是否存在子树外均不合法标记和当前暂时合法的子树内合法结点数。当一个结点的两个儿子中都出现子树外均不合法标记时答案一定为 \(0\)。细节仔细思考一下。

时间复杂度 \(O(n\log n)\),瓶颈在于离散化。

多说一句,其实只要那些红色的点都做过就行了,具体谁与谁做无所谓。所以写成都与最上面那个祖先做会方便一点。

标签:结点,子树内,标记,Distinctive,Tree,合法,子树外,权值,CF1467E
From: https://www.cnblogs.com/landsol/p/17786465.html

相关文章

  • Jquery 下拉树下面是一个使用Combotree组件的简单案例:
    1、html <!DOCTYPEhtml><html><head><title>Combotree使用案例</title><linkrel="stylesheet"type="text/css"href="https://cdn.jsdelivr.net/npm/jquery-combotree/dist/jquery.combotree.min.css"......
  • gitee与SourceTree的安装使用
    git可视化管理工具SourceTree安装教程:http://wed.xjx100.cn/news/174839.html?action=onClickgitee可视化管理工具SourceTree安装使用教程:https://blog.csdn.net/wan369282913/article/details/131858067这两篇文章结合着看,第一步下载git,第二步下载sourcetree,第三步用git生成公钥......
  • 版本管理客户端工具SourceTree
      [使用]1.设置SSH客户端工具>选项 设置OpenSSH, SSH密钥这一栏自然会去选择当前用户下的.ssh目录下的id_rsa这个私钥: ......
  • CF1003E Tree Constructing
    很trivial的构造题首先上来判掉一些显然无解的情况,然后考虑既然最后直径长为\(d\)那么不妨先搞一条长度为\(d\)的链来考虑在链上接一些点使得直径不会变长,对于链上的某个点,它最多能接上的链的长度就是它到两个端点距离的最小值不妨设计递归函数求解,设solve(x,dis,lim)表示在\(x......
  • CF723F st-Spanning Tree
    小清新贪心+分类讨论,因为边的数组开小了WA了好久……首先我们贪心地选出不包含\(s,t\)的边,用这些边尽量地将除了\(s,t\)外的\(n-2\)个点连通接下来考虑每个连通块,由于题目保证图初始连通,因此只有三种情况,即要么其中仅有和\(s\)相连的边;仅有和\(t\)相连的边;或者同时有向\(s,t\)连......
  • [ABC207F] Tree Patrolling 题解
    [ABC207F]TreePatrolling弱智DP题,设\(f(i,j,0/1/2)\)表示在点\(i\),子树中有\(j\)个点被覆盖,且\(i\)点自身状态是未被覆盖/被自身覆盖/被某个儿子覆盖,然后树上背包更新就行了。代码:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmo......
  • AT_tdpc_tree 木 题解
    木弱智DP题,直接设\(f_i\)表示\(i\)子树内染色的方案数,然后每次合并一个点与它的儿子即可(具体而言,因为儿子间独立,所以方案数就是二项式系数)。需要注意的是因为第一条边可以在任意位置,所以要以每个点为根各DP一次。但是这样每条边会被算两次,所以乘以2的逆元即可。时间......
  • 哈夫曼树Huffman tree
    哈夫曼树Huffmantree一句话解释,哈夫曼树将一个softmax的多分类问题转换成了多个logistic的二分类问题以连续词袋模型(CBOW)为例,输入多个词向量,输出层则输出最可能的w,最简的实现自然是softmax,但为了计算难度,使用哈夫曼树简化计算pwp^wpw为从根节点到词汇w叶子节点对应的路径......
  • Huffman Tree in C
    ////main.c//HuffmanTree////Createdbystevexiaohuzhaoon2023/10/18.//#include<stdio.h>#include<stdlib.h>//定义一个HuffmanTree的节点structHTNode{//表示权值intweight;//定义一个左节点和右节点指针structHTNode*l......
  • [题解] CF1790E - XOR Tree
    CF1790E-XORTree题意给定一颗无根树,在可以改变任意一个点的点权操作基础上,让树上任意简单路径的异或和不为\(0\),问最少需要多少次操作。思路假设某个点为根,设\(pre_x\)为\(x\)点到根的树上前缀异或和,\(a_x\)为\(x\)的点权,则\(x\)和\(y\)之间简单路径的异或和......