区间修改的kd-tree,打标记,下传. 每次询问的时候,从询问点向上找到根,然后依次下传下来,再回答询问. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define N 100001 #define KD 2 int n,root,m,q,qp[2][KD],fa[N],val,delta[N]; bool dn; struct Node { int ch[2…
Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色 Input 第一行一个数T,表示数据组数 接下来每组数据的第一行三个数n,c,q表示结点个数,颜色数和操作数 接下来一行n-1个数描述2..n的父节点 接下来q行每行三个数a,l,c 若c为0,表示询问a的颜色 否则将距离a不超过l的a的子节点染成c Output 设当前是第i个操作,y_i为本次询问的答案(若本次操作是一个修改则y_i为0),令z_i=i*y_i…
Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色   Input 第一行一个数T,表示数据组数 接下来每组数据的第一行三个数n,c,q表示结点个数,颜色数和操作数 接下来一行n-1个数描述2..n的父节点 接下来q行每行三个数a,l,c 若c为0,表示询问a的颜色 否则将距离a不超过l的a的子节点染成c Output 设当前是第i个操作,y_i为本次询问的答案(若本次操作是一个修改则y_i为0),令z_i=i*y…
[BZOJ4154][Ipsc2015]Generating Synergy Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色 Input 第一行一个数T,表示数据组数 接下来每组数据的第一行三个数n,c,q表示结点个数,颜色数和操作数 接下来一行n-1个数描述2..n的父节点 接下来q行每行三个数a,l,c 若c为0,表示询问a的颜色 否则将距离a不超过l的a的子节点染成c Output 设当前是第i个操作,y…
浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=4154 每个节点看做是点\((dfn_i,dep_i)\),然后对于距离\(a\)的不超过\(l\)的在\(a\)子树中的点就是正方形\([dfn_a,dfn_a+siz_a-1][dep_a,dep_a+l]\),直接范围\(cover\)和单点查询即可. 时间复…
Generating Synergy bzoj-4154 Ipsc-2015 题目大意:给定一棵n个节点树,m个操作,支持:将一个点周围所有距该点距离不超过l的子结点的颜色改成另一种颜色:查询单点颜色.每个点的颜色开始都是1. 注释:$1\le n,m\le 10^5$ 想法:这就是一个典型的不是KD-Tree裸题,我们需要将它转化成点. 首先,我们先拉出整棵树的dfs序. 每个节点,我们设横坐标就是dfs序上的下标,纵坐标就是深度.我们发现,一个点的子树是一段连续的区间,然后当深度确定是,我们…
题意 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色 分析 我们以dfs序为横坐标,深度为纵坐标,建kd树.我们每次更新,都是在kd树中更新一个矩形,横坐标为[st[a],en[a]],纵坐标[depth[a],depth[a]+l].那么就相当于线段树的区间更新,我们需要给它打个标记. #include <cstdio> #include <cstring> #include <algorithm> #in…
题目描述 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色 输入 第一行一个数T,表示数据组数 接下来每组数据的第一行三个数n,c,q表示结点个数,颜色数和操作数 接下来一行n-1个数描述2..n的父节点 接下来q行每行三个数a,l,c 若c为0,表示询问a的颜色 否则将距离a不超过l的a的子节点染成c 输出 设当前是第i个操作,y_i为本次询问的答案(若本次操作是一个修改则y_i为0),令z_i=i*y_i,请输出z_1+z_2+..…
题目 大概已经掌握熟练码出\(kdt\)的技能了 发现距离子树根节点\(x\)不超过\(l\)的点可以用两种方式来限制,首先\(dfs\)序在\([dfn_x,dfn_x+sum_x)\)中,深度自然也要满足\([deep_x,deep_x+l]\) 发现这变成了对一个子矩形染色同时询问单点颜色的题目 我们直接\(kdt\)打标机就好了 需要注意的一点是,仅对\(kdt\)中子树的根进行的修改不打标机 代码 #include<cstdio> #include<cstring> #i…
题目: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree is symmetric: 1 / \ 2 2 / \ / \ 3 4 4 3 But the following is not: 1 / \ 2 2 \ \ 3 3 Note:Bonus points if you could solve…
题目: Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 代码: /** * Definition for a binary tree node. * struct TreeNode…
题目描述 给定一个N个结点的无向树,树中的结点按照1...N编号,树中的边按照1...N − 1编号,每条边都赋予一个权值.你需要编写程序支持以下三种操作: 1.    CHANGE i v:将i号边的权值改为v. 2.    NEGATE a b:将结点a到结点b路径上每条边权值取相反数.例如NEGATE(-3)=3, NEGATE(3)=-3. 3.    QUERY a b:返回结点a到结点b路径上权值最大边的权值. 输入 第一行为N(N ≤ 105),代表树中结点的个数. 接下来N −…
题意 给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一次的数,并且要求找的这个数尽可能大.如果找不到这样的数,则直接输出0.我会采取一些措施强制在线. 分析 预处理出pre[i],nxt[i]分别代表左边离它最近的相同数字的坐标,nxt[i]代表右边离它最近的相同数组的坐标.那么我们每次查询在[l,r]内,找出一个最大的数字且它的pre[i]<l,nxt[i]>r.我们如何用kd树解决这个问题呢?我们用三维的kd树来处理,第一维为下标i,第二维为pre[i]…
这个题要求kd树支持两个操作. 1.插入一个新的点. 2.查询某个点最近曼哈顿距离. 注意查询曼哈顿距离和查询欧几里得距离,是有区别的.(估价函数不同). #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <cmath> using namespace std; +; ; struct kdNode{ ],mnn[],mxn…
题意 给出n个酒店的坐标和价格,然后m个查询,每个查询给出一个人的坐标和能承受的最大价格,然后找出在他价格承受范围以内,距离他最近的宾馆,如果有多个,那么输出第一个 分析 kd树的模板题 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <cmath> using namespace std; +; ; typedef lo…
首先沿着上节课的AdaBoost-Stump的思路,介绍了Decision Tree的路数: AdaBoost和Decision Tree都是对弱分类器的组合: 1)AdaBoost是分类的时候,让所有的弱分类器同时发挥作用 2)Decision Tree是每次根据condition让某个弱分类器发挥作用 林强调了一点,Decision Tree很多套路都是前人的insights,觉得这用好就这样处理了,没有那么完备的理论保证. 从递回的角度,可以这样看Decision Tree: Decisi…
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,判断是否他自己的镜像对称的.(以自身中间,为镜像对称的) 例如羡慕这个二叉树就是对称的: 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个就不是对称的: 1 / \ 2 2 \ \ 3 3 笔记: 如果你既能迭代的解决这个问题,又能递归的解决这个问题,那么将给你加分. ++++++++++++++++…
迭代版本用的是二叉树的DFS,中的root->right->left ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定两个二叉树,写一个函数判断他们是否是相同的. 如果两个二叉树的结构相同而且每个节点里面的值也相同,那么认为他们是相同的二叉树. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++…
传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=110 传送门2:http://www.lydsy.com/JudgeOnline/problem.php?id=2581 这题我一看就知道自己不会了,只想了个O(2^n * 2 ^ n)即O(2 ^ 2n)的大暴力,也懒得打了,果断看solution. 看了之后惊呆了,看到了一种从未见过,闻所未闻的树叫做And-Or Tree,百度了一下,并没有官方中文翻译,姑且叫他“与或树”…
这道题明明没有省选难度啊,为什么就成紫题了QAQ 另:在CF上A了但是洛谷Remote Judge玄学爆零. 思路是DFS序+线段树. 首先这道题直观上可以对于每一次修改用DFS暴力O(n),然后对于询问O(1)解决. 但是这个方法实在是太耗时间了,因此我们想到了dfs序. 所谓dfs序,就是按照dfs(这里我们用先序遍历)的顺序给这颗树打上一个标签. 然后我们就可以把这颗树“拍平”,用一些支持区间修改单点查询的数据结构log级别解决问题了. 当然这样粗略地说一遍肯定会有人看不懂,还是通过一个实…
目录 决策树原理 决策树代码(Spark Python) 决策树原理 详见博文:http://www.cnblogs.com/itmorn/p/7918797.html 返回目录 决策树代码(Spark Python) 代码里数据:https://pan.baidu.com/s/1jHWKG4I 密码:acq1 # -*-coding=utf-8 -*- from pyspark import SparkConf, SparkContext sc = SparkContext('local')…
http://acm.hdu.edu.cn/showproblem.php?pid=2815 题意:裸题... 关于拓展BSGS的详细解释我写了一篇博文:http://www.cnblogs.com/KonjakJuruo/p/5178600.html 题解:又有一个坑,就是N>=P的时候输出无解. #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #incl…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1012 裸的树状数组. #include <cstdio> #include <algorithm> const int maxm = 200005; int m, d, c[maxm], n, t1, t; char opr; inline void upd(int pos, int val) { while (pos) { c[pos] = std::max(c[pos],…
多组数据真tm恶心~ 把 $dfs$序和深度分别看作横纵坐标,然后用 $KDtree$ 数点就可以了~ #include <cstdio> #include <cstring> #include <algorithm> #define N 300005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int d; struct Node { int c…
Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色 区间修改单点查询kdtree #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<ctime> #include<cstdlib> #define LL long long using na…
2648: SJY摆棋子 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2459  Solved: 834[Submit][Status][Discuss] Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子.此处的距离是 曼哈顿距离 即(|x1-x2|+|y1-y2|) .现在给出N<=500000…
k-d tree算法 k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据结构.主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索). 应用背景 SIFT算法中做特征点匹配的时候就会利用到k-d树.而特征点匹配实际上就是一个通过距离函数在高维矢量之间进行相似性检索的问题.针对如何快速而准确地找到查询点的近邻,现在提出了很多高维空间索引结构和近似查询的算法,k-d树就是其中一种. 索引结构中相似性查询有两种基本的方式:一种是范围查询(range searches),…
查询算法的流程 如果查询与当前结点的区域无交集,直接跳出. 如果查询将当前结点的区域包含,直接跳出并上传答案. 有交集但不包含,继续递归求解. K-D Tree 如何划分区域 可以借助下文图片理解. 我们不仅可以将 K-D Tree 理解为一个高维二叉搜索树,通过某一维标准值进行元素的划分. 还可以理解为使用一些直线(线段或射线)将整个空间划分为若干个区域,便于缩小搜索范围,以达到剪枝的目的. 2-D 查询复杂度证明 有问题请在评论区指出,谢谢! 可以知道,时间开销最大的地方在于流程中"有交集但…
K-D Tree 这东西是我入坑 ICPC 不久就听说过的数据结构,但是一直没去学 QAQ,终于在昨天去学了它.还是挺好理解的,而且也有用武之地. 目录 简介 建树过程 性质 操作 例题 简介 K-D Tree(KDT , k-Dimension Tree) 是一种可以 高效处理 \(k\) 维空间信息 的数据结构.更具体地说,它是维护了 \(k\) 维空间 \(n\) 个点的数据结构,而且它是一棵平衡树. 建树过程 由于二维的形式是竞赛中最常见而且便于讲解,故以二维的情况为例.所以下面构建的都…
Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11570   Accepted: 3626 Description Give a tree with n vertices,each edge has a length(positive integer less than 1001).  Define dist(u,v)=The min distance between node u and v.  Give a…