草庐IT

binary-tree

全部标签

leetcode 696. Count Binary Substrings 计数二进制子串(简单)

一、题目大意给定一个字符串s,统计并返回具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是成组连续的。重复出现(不同位置)的子串也要统计它们出现的次数。示例1:输入:s="00110011"输出:6解释:6个子串满足具有相同数量的连续1和0:"0011"、"01"、"1100"、"10"、"0011"和"01"。注意,一些重复出现的子串(不同位置)要统计它们出现的次数。另外,"00110011"不是有效的子串,因为所有的0(还有1)没有组合在一起。示例2:输入:s="10101"输出:4解释:有4个子串:"10"、"01"、"10"、"01",具有相同数量的

Codeforces1695 D1.+D2 Tree Queries

题意给一个n个点的无向图,其中有一个隐藏点X,可以进行一组询问S来确定S是n个节点中的哪个点。S包括k个询问节点。询问返回的值也为k个值,每个值为X点到每个询问节点的最短路距离,求k最小为多少。提示1.对于k个节点来说,最优的结构肯定是选择所有的叶子节点2.对于一个节点来说,假如它连了m条链(包括单个叶子节点),可以只标记m-1条链的叶子节点即可3.满足1,2条件以后,可以尝试再去询问点,发现均无法全部检测到,原因是:假如去点m-2条链,剩下的两条链,相同深度部分对于其他的节点来说是无法判断的,他们是等价的方法可以树形DP,一下,或者从每个叶子节点开始搜索一下,这里主要将树形DP的方法:dp[

Codeforces1695 D1.+D2 Tree Queries

题意给一个n个点的无向图,其中有一个隐藏点X,可以进行一组询问S来确定S是n个节点中的哪个点。S包括k个询问节点。询问返回的值也为k个值,每个值为X点到每个询问节点的最短路距离,求k最小为多少。提示1.对于k个节点来说,最优的结构肯定是选择所有的叶子节点2.对于一个节点来说,假如它连了m条链(包括单个叶子节点),可以只标记m-1条链的叶子节点即可3.满足1,2条件以后,可以尝试再去询问点,发现均无法全部检测到,原因是:假如去点m-2条链,剩下的两条链,相同深度部分对于其他的节点来说是无法判断的,他们是等价的方法可以树形DP,一下,或者从每个叶子节点开始搜索一下,这里主要将树形DP的方法:dp[

Codeforces 1682 D Circular Spanning Tree

题意1-n排列,构成一个圆;1-n每个点有个值0或者1,0代表点的度为偶数,1代表点的度为计数;询问能否构成一棵树,树的连边在圆内不会相交,在圆边上可以相交,可以则输出方案。提示1.首先考虑什么时候无解,显然,奇数点个数是偶数,并且>=22.由奇数点个数为偶数可以发现,它们可以连到同一个偶数点上(并非直接连)3.剩下的偶数点可以直接顺时针串联,直到连到最近的一个奇数点上4.相当于每个奇数点后面有一条偶数链,或者没有偶数链只有一个奇点(这都是一样的,因为链最后一个点都只剩下一个需要连的点),直接把链的最后一个点连在一起就好了代码#includeusingnamespacestd;chars[20

Codeforces 1682 D Circular Spanning Tree

题意1-n排列,构成一个圆;1-n每个点有个值0或者1,0代表点的度为偶数,1代表点的度为计数;询问能否构成一棵树,树的连边在圆内不会相交,在圆边上可以相交,可以则输出方案。提示1.首先考虑什么时候无解,显然,奇数点个数是偶数,并且>=22.由奇数点个数为偶数可以发现,它们可以连到同一个偶数点上(并非直接连)3.剩下的偶数点可以直接顺时针串联,直到连到最近的一个奇数点上4.相当于每个奇数点后面有一条偶数链,或者没有偶数链只有一个奇点(这都是一样的,因为链最后一个点都只剩下一个需要连的点),直接把链的最后一个点连在一起就好了代码#includeusingnamespacestd;chars[20

Codeforces 1670 E. Hemose on the Tree

题意给你个数p,n=2^p;有一棵树有n个节点,告诉你怎么连边;每个点有个权值,每条边也有个权值,权值需要自行分配,[1,2,3..n...2n-1],总共2n-1个权值;你需要选一个节点,使得他到所有其他边或者节点的简单路径的异或最大值最小。思路显然,给你个p,不直接给你n一定是有潜藏的东西的,分析一下,n=2^p,那么n的结构一定是1000000,1后面都是0,那可以推测出最终的答案一定是小于等于n的1.初始节点可以随便选的,但是它的值一定设为n2.处于一个点的连接点与边来说,他们的关系一定是x,x+n,这样他们的异或值一定是n,可以保证答案在0-n之间改变,注意x与x+n的位置设置3.如

Codeforces 1670 E. Hemose on the Tree

题意给你个数p,n=2^p;有一棵树有n个节点,告诉你怎么连边;每个点有个权值,每条边也有个权值,权值需要自行分配,[1,2,3..n...2n-1],总共2n-1个权值;你需要选一个节点,使得他到所有其他边或者节点的简单路径的异或最大值最小。思路显然,给你个p,不直接给你n一定是有潜藏的东西的,分析一下,n=2^p,那么n的结构一定是1000000,1后面都是0,那可以推测出最终的答案一定是小于等于n的1.初始节点可以随便选的,但是它的值一定设为n2.处于一个点的连接点与边来说,他们的关系一定是x,x+n,这样他们的异或值一定是n,可以保证答案在0-n之间改变,注意x与x+n的位置设置3.如

二分查找Binary_Search

二分查找与二分答案笔记二分查找Binary_Search-唔知叫咩emm-博客园(cnblogs.com)Binary_Search_int.cppBinary_Search_double.cpp基础理论二分查找BinarySearch(也称折半搜索、对数搜索)应用场景,关键词在一个有序数组中查找某一元素的算法看见:排序+查找,就要想到二分查找找区间里面的一个值答案在区间里,就是二分答案,用二分来枚举答案STL的二分查找查找首个不小于给定值的元素的函数std::lower_bound和查找首个大于给定值的元素的函数std::upper_bound,二者均定义于头文件中注意,不能用find()代

二分查找Binary_Search

二分查找与二分答案笔记二分查找Binary_Search-唔知叫咩emm-博客园(cnblogs.com)Binary_Search_int.cppBinary_Search_double.cpp基础理论二分查找BinarySearch(也称折半搜索、对数搜索)应用场景,关键词在一个有序数组中查找某一元素的算法看见:排序+查找,就要想到二分查找找区间里面的一个值答案在区间里,就是二分答案,用二分来枚举答案STL的二分查找查找首个不小于给定值的元素的函数std::lower_bound和查找首个大于给定值的元素的函数std::upper_bound,二者均定义于头文件中注意,不能用find()代

Codeforces 1646 D. Weight the Tree

题意给你n个节点的树,让你给每个节点进行赋值,并且赋的值需要为正整数;同时当一个节点的值等于所有邻居节点的值的和时,这个点为好点;求出一组赋值情况,满足树的好点个数最大化的同时,所有节点赋值的总和最小;思路1.显然无法存在两个好点相邻存在的情况(除非只有两个节点);2.对于坏点直接赋值为1即可;3.可以树形dp解决,f[x][0/1][0/1],第一维代表以x为根,第二维代表是否为好点,第三维代表是好点的个数/子树节点值的总和代码#includeusingnamespacestd;vectorg[200005];intf[200005][2][2];longlongans[200005];in