hdu6121 build a tree(树)】的更多相关文章

/** 题目:hdu6121 Build a tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6121 题意:n个点标号为0~n-1:节点i的父节点为floor((i-1)/k); 0是根节点. 求这个树的所有节点为根的子树的节点数的异或和. 思路:模拟 可以发现k = min(k,n-1):即:k>=n-1时候结果一样. 然后画图可以发现是一个满k叉树(叶子不一定满). 然后发现:如果这是一个叶子也满的k叉树,那么直接就可以计算出结果. 当不…
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6121 题面: Build a tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 1240    Accepted Submission(s): 509 Problem Description HazelFan wants…
题解: 可以考虑每一层结点的子树大小 必定满足下面的情况,即 a,a,a,a,a,a,b,c,c,c,c........ 然后每一层依次往上更新,结果是不变的 一共有logn层,所以依次扫上去,统计结果即可 注意到k=1的时候,是一条链,需要特殊处理orz 这个打表可以发现明显的规律,也是二进制的一种容斥吧 #include <iostream> #include <cstdio> #include <cmath> using namespace std; typede…
http://acm.hdu.edu.cn/showproblem.php?pid=6121 [题意] 询问n个结点的完全k叉树,所有子树结点个数的异或和是多少 [思路] 一棵完全K叉树,对于树的每一层,我们可以分为三种结点: 满k叉树的结点 不满的k叉树 比第一种情况少一层的满结点的k叉树 [AC] #include<bits/stdc++.h> using namespace std; typedef long long ll; ll n,k; ll ans; ll kn[],sz[],f…
给你n,K,让你构造出一颗n个结点的完全K叉树,求所有结点子树大小的异或和. 先把n号结点到根的路径提取出来单独计算.然后这条路径把每一层分成了左右两部分,每一层的左侧和其上一层的右侧的结点的子树大小相同. 就可以容易计算每种大小的子树个数了. 当K等于1时,要单独讨论,答案为1 xor 2 xor ... xor n.这个打个表非常明显. #include<cstdio> using namespace std; typedef long long ll; ll n,K,pw[105]; i…
Build a tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 946    Accepted Submission(s): 369 Problem Description HazelFan wants to build a rooted tree. The tree has n nodes labeled 0 to n−1…
题意: 给出一棵树,每个顶点上有个\(2 \times 2\)的矩阵,矩阵有两种操作: 顺时针旋转90°,花费是2 将一种矩阵替换为另一种矩阵,花费是10 树上有一种操作,将一条路经上的所有矩阵都变为给出的矩阵,并输出最小花费. 分析: 矩阵可以分为两类共6种,一类是两个1相邻的矩阵共4种:一类是两个1在对角线的矩阵共2种. 同一类矩阵可以通过旋转操作得到,否则只能用替换. 事先计算好每种矩阵转换到另外一种矩阵的最少花费,然后树链剖分再用线段树维护就好了. #include <cstdio>…
Hdu 5274 Dylans loves tree (树链剖分模板) 题目传送门 #include <queue> #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <vector> #define ll long…
POJ3237 Tree 树链剖分 边权 传送门:http://poj.org/problem?id=3237 题意: n个点的,n-1条边 修改单边边权 将a->b的边权取反 查询a->b边权最大值 题解: 修改边权就查询点的深度大的点,用大的点去存这条边的边权,其余的就和点权的是一样的了 取反操作用线段树维护,区间最大值取反就是区间最小值,区间最小值取反就是区间最大值 所以维护两颗线段树即可,lazy标记表示覆盖单边的边权 代码: #include <set> #include…
本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一.方法列表 //部分方法onClick : function (node) {console.log($('#box').tree('getNode', node.target)); console.log($('#box').tree('getData', node.target));console.log($('#box').tree('getDa…