题解-CF429C Guess the Tree】的更多相关文章

题面 CF429C Guess the Tree 给一个长度为 \(n\) 的数组 \(a_i\),问是否有一棵树,每个节点要么是叶子要么至少有两个儿子,而且 \(i\) 号点的子树大小是 \(a_i\). 数据范围:\(1\le n\le 24\). 题解 发现 \(n\) 很小,想到可以状压. 设叶子节点有 \(ln\) 个,所以中间节点有 \(mn=n-ln\) 个. 由于"每个节点要么是叶子要么至少有两个儿子",所以 \(ln\ge\lceil\frac n2\rceil\),…
题解:CF593D Happy Tree Party Description Bogdan has a birthday today and mom gave him a tree consisting of \(n\) vertecies. For every edge of the tree \(i\) , some number \(x_i\) was written on it. In case you forget, a tree is a connected non-directed…
Problem \(\mathrm{Code~Festival~2017~Final~J}\) 题意概要:一棵 \(n\) 个节点有点权边权的树.构建一张完全图,对于任意一对点 \((x,y)\),连一条长度为 \(w[x] + w[y]+ dis(x, y)\) 的边.求这张图的最小生成树. \(n\leq 2\times 10^5\) Solution 在操场上晒太阳时想到的做法,求 \(\mathrm{MST}\) 可以使用另一种贪心算法:每次找到每个点连出去的最短的边,并将其合并,一次是…
题意:判断一个节点为n的二叉树是否为完全二叉树.Yes输出完全二叉树的最后一个节点,No输出根节点. 建树,然后分别将该树与节点树为n的二叉树相比较,统计对应的节点个数,如果为n,则为完全二叉树,否则即不是. #include <iostream> #include <cstdio> #include <algorithm> #include <string.h> using namespace std; ; ]; int lastNode; struct…
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as follows: The left subtree of a node contains only nodes with keys less than the node's key. The right subtree of a node contains only nodes with keys…
题目: Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 说明: 1)实现与根据先序和中序遍历构造二叉树相似,题目参考请进 算法思想 中序序列:C.B.E.D.F.A.H.G.J.I   后序序列:C.E.F.D.B.H.J.I.G.A   递归思路: 根据后序遍历的特点,…
这道题明明没有省选难度啊,为什么就成紫题了QAQ 另:在CF上A了但是洛谷Remote Judge玄学爆零. 思路是DFS序+线段树. 首先这道题直观上可以对于每一次修改用DFS暴力O(n),然后对于询问O(1)解决. 但是这个方法实在是太耗时间了,因此我们想到了dfs序. 所谓dfs序,就是按照dfs(这里我们用先序遍历)的顺序给这颗树打上一个标签. 然后我们就可以把这颗树“拍平”,用一些支持区间修改单点查询的数据结构log级别解决问题了. 当然这样粗略地说一遍肯定会有人看不懂,还是通过一个实…
题面 解析 这题考试时刚了四个小时. 结果还是爆零了 主要就是因为\(lca\)找伪了. 我们先考虑没有操作1,那就是裸的线段树. 在换了根以后,主要就是\(lca\)不好找(分类讨论伪了). 我们将一开始以\(1\)为根的图作为原图. 仔细思考一下, 我们会发现只有当原图上的\(lca\)在\(1\)和当前的根的路径上时,\(lca\)才会发生变化. 考试时怎么没发现 而当\(lca\)变化后,我们画一下图, 就会发现, 现在的\(lca\)就是两个点与根的\(lca\)中深度较大的一个. (…
题面 解析 其实这题可以考虑离线做法,用并查集解决. 因为仔细想,添加标记并不方便, 但如果用并查集记录下祖先, 再一一删除,就会方便很多. 先把每次操作记录下来, 同时记录下每个点被标记的次数(因为有多次标记,所以不能只用bool). 然后dfs遍历,记录祖先. 再倒序处理, 当一个点的标记被删完时,就把它的并查集指向它的父亲, 并统计答案. 最后输出就行了! 具体看代码: #include<bits/stdc++.h> using namespace std; inline int rea…
Problem 题目概要:给定一棵 \(n\) 个节点的树,点有点权,进行 \(m\) 次路径取\(\max\)的操作,最后统一输出点权 \(n\leq 10^5,m\leq 5\times 10^6\) Thoughts 今天闲来无事想到的题目,然后就出出来了 我的做法复杂度是\(O(n\log n+m)\),想把\(O(m\log m)\)卡掉,于是一开始把 \(m\) 开到了\(10^7\),后来发现由于常数过大,导致需要跑\(7s\) 虽然其他做法都跑不出来,然后就把数据开小到\(5\t…