首页 > 其他分享 >Tree

Tree

时间:2024-05-15 12:56:56浏览次数:14  
标签:Code dep Tree sqrt 答案 lca calc

联合权值

显然可以枚举中间点,然后做完了。

Code

Cow Politics G

显然的,对于每种颜色,点对中一定包含深度最大的点。

枚举另外一个点即可。

Code

Passable Paths

显然我们需要选择深度最深的点和距离该点最远的点,判断其他点是否在它们的路径上即可。

Code

AHOI2008 聚会

由题意可得要选出 \(u\) 使得 \(dis(u,i)+dis(u,j)+dis(u,k)\) 最小。

首先证明一下 \(u\in\{lca(i,j),lca(i,k),lca(j,k)\}\)

如果 \(u\not\in\{lca(i,j),lca(i,k),lca(j,k)\}\),则将 \(u\) 替换成 \(\{lca(i,j),lca(i,k),lca(j,k)\}\) 中的一个必然能使答案减少。

到这里已经可做了。

实际上我们发现,记 \(3\) 个数分别为 \(u,v,w\),则我们选择 \(u \operatorname{xor} v \operatorname{xor} w\) 为答案(\(u,v,w\) 中有 \(2\) 个相同)。

答案为 \(dep_i+dep_j+dep_k-dep_{lca(i,j)}-dep_{lca(i,k)}-dep_{lca(k,j)}\)。

Code

树上询问

记 \(sz_i\) 表示 \(i\) 的子树大小,\(calc(x,y)\) 表示 \(y\) 的不含 \(x\) 的子树中的大小。

对于询问 \((a,b,c)\) 我们分情况讨论:

记 \(v=lca(a,b)\)。

  • \(c=v\),此时答案为 \(n-calc(a,v)-calc(b,v)\)。
  • \(c\in v \rightarrow a\),此时答案为 \(sz_c-calc(a,v)\)。
  • \(c\in v \rightarrow b\),此时答案为 \(sz_c-calc(b,v)\)。
  • \(c\not\in a \rightarrow b\),此时答案为 \(0\)。

Code

rStage5 - Hard Conveyors

记 \(f_u\) 表示距离 \(u\) 最近的关键点距离 \(u\) 的距离。

dij 可以维护。

问题变为求 \(\min_{ u\in s\rightarrow t}2f_u+dis(s,t)\)。

注意后面这个可以简单求得单独拆出,前面的树剖维护之。

Code

Tree Queries

我们令第一次染黑的节点为 \(x\),以 \(x\) 为根建树。

记 \(a_{i}=\min_{u\in i \leftarrow x}u\)。

每次 \(1\) 操作带来的影响有(修改 \(u\)),对于所有 \(p\in\text{black}\):

  • 答案均为 \(\min(a_p,a_u)\)。

记录全局最小值即可。

Code

生活在树上(hard version)

记录 \(s_u=\oplus_{i\in1\rightarrow u}w_i\),则题目要求化为是否存在 \(s_u\oplus s_v\oplus s_{lca(u,v)}\oplus k\) 的点

主席树维护之。

Code

Tree Queries

先考虑 \(n^2\) 怎么做。

先特判掉 \(n=1\) 和链。

对于每个点 \(x\),我们令 \(x\) 必选,以 \(x\) 为根 dp。

记 \(f_u\) 表示 \(u\) 的子树全部确定要几个点,则有

\[f_i=\sum_{v\in son_i}f_v+\max(0,\sum_{v\in son_i}[f_v=0]-1) \]

对于所有 \(i\) 取 \(\min f_i+1\) 即可。

可以通过 D1。

考虑对于一个度数 \(\ge 3\) 的点 \(i\) 进行 dp,答案为 \(f_i\)。

为什么这样可行?因为保证了至少有一个点在子树外必选。

Code

TreeMaster

我们可以发现,\(f(x,y)\) 的状态数不会太多。

考虑证明,记 \(d_x\) 为 \(x\) 层的节点数。

  • 当 \(d_x\ge \sqrt{n}\) 时,由于最多只有 \(\dfrac{n}{\sqrt{n}}\le \sqrt{n}\) 层,每层至多调用 \(q\) 次,复杂度 \(q\sqrt q\)。
  • 否则由于 \(d_x < \sqrt{n}\),最多有 \(\dfrac{n}{d_x}\) 层,每次调用至多 \(d_x^2\) 次,则状态数是 \(nd_x\le n\sqrt{n}\)。

由于 map 太慢,采用如下优化。

  • \(d_x\ge \sqrt{n}\) 时,我们直接暴力,无需记忆化。
  • 由于 \(dep_x=dep_y\),则知道 \(x\),知道 \(y\) 是 \(x\) 层的第几个节点就可以确定 \(y\)(代码中的 \(p_i\) )。
  • 使用数组代替 map。

Code

SDOI2011 消防

发现答案一定在直径上。

之后就是工程题,枚举左端点类似单调队列。

Code

貌似假了/kl(树网的核 93pts)。

标签:Code,dep,Tree,sqrt,答案,lca,calc
From: https://www.cnblogs.com/WhisperingWillow/p/18193630

相关文章

  • Game on Tree
    原题链接题解easy.ver::只能朝一个方向走,还剩奇数个格子时先手获胜medium.ver:令\(u_i\)为根节点,这样就只能朝子节点的方向走,设\(dp[now]\)为当以now为根的树,且now节点已经有一颗棋(其子节点均还没有)时,先手必胜1还是必败0,状态转移方程:\(dp[now]|=(1-dp[next])\)hard.ver:......
  • Tree树组件格式化数据、获取所有数据数组
     格式化树数据:functionreplaceNameWithTitle(data){//遍历数据数组returndata.map(item=>{//复制当前对象,以免修改原始数据constnewItem={...item};//将name属性替换为titlenewItem......
  • CF207C3 Game with Two Trees
    CF207C3GamewithTwoTrees妙到家的树上字符串问题。约定树\(1\):\(t_1\)。树\(2\):\(t_2\)。\(S_{1/2}(i,l)\)为树\(1/2\)上节点\(i\)沿父亲走经过\(l\)​条边所构成的字符串。\(E_{1/2}(u,v)\)为树\(1/2\)上,连接节点\(u,v\)​的边的字符。\(fa_{......
  • #Trie#洛谷 6018 [Ynoi2010] Fusion tree
    题目给定一棵树,树上每个节点都有点权,需要实现三种操作,第一种是将与\(x\)相邻的所有节点点权加一,第二种是单点减小点权,第三种是查询与\(x\)相邻的所有节点点权的异或和分析相邻实际上就是父节点和子节点,不妨将其拆开考虑,需要解决单点查询单点修改的问题,考虑维护\(n\)......
  • 一道DP(2024ICPC武汉邀请赛A)-shaking trees
    ShakingTrees题外话这题易哥哥跟我说这题的时候,点明了这题是关于高度\(100\)的\(O(n^3)\)或者\(O(n^4)\)的dp,还有提出切割点的概念使序列化。dp是真的,序列化也是真的。只能说易哥哥我的神。不过其实切割点是根据树形态而变的,之前一直以为是不变的,歪了好久。不知道是我没get到......
  • 算法学习笔记(16):Link Cut Tree
    LinkCutTree简称LCT(不是LiChaoTree),是一种非常强大的数据结构。声明该博客写来很大部分目的是帮助自己理解,笔者水平有限,没办法完全原创,有很多内容源自于OI-wiki,和网上博客,见谅。功能考虑一些问题:树上单点查,树上路径修改,这是树上差分可以解决的。那么如果路径查,......
  • 『Solution』Codeforces 372D Choosing Subtree is Fun
    首先这个\(k\)的限制不是很好入手,考虑先从如果选取了区间\([l,r]\)来入手。那么此时连通块最小的\(siz\)就是把这些点拎出来建虚树对应在原树上的所有点。那么这个有个结论,考虑按\(\operatorname{dfn}\)序排序后的点为\(p_0\simp_{k-1}\),那么对应的最小\(sz\)就......
  • openGauss btree-索引故障情况下应对策略
    btree索引故障情况下应对策略问题现象偶发索引丢失错误,报错如下。ERROR:index'xxxx_index'containsunexpectedzeropage或ERROR:index'pg_xxxx_index'containsunexpectedzeropage或ERROR:compresseddataiscorrupt原因分析该类错误是因为索引发生故障导......
  • LeetCode 1373. Maximum Sum BST in Binary Tree
    原题链接在这里:https://leetcode.com/problems/maximum-sum-bst-in-binary-tree/description/题目:Givena binarytree root,return themaximumsumofallkeysof any sub-treewhichisalsoaBinarySearchTree(BST).AssumeaBSTisdefinedasfollows:Thel......
  • CF1967C. Fenwick Tree-算子展开,树状数组的结构
    link:https://codeforces.com/problemset/problem/1967/C题意:定义\(f(a)=s\)中的\(f\)表示把序列\(a\)映射为其树状数组的操作(\(s\)就是对应的树状数组),并且操作是在取模下作的,已知\(f^k(a)=b\),已知序列\(b\)和自然数\(k\),求\(a\).\(1\leqn\leq2\times10^5,1\leq......