热身训练1 Blood Cousins Return】的更多相关文章

点此看题 简要题面: 一棵树上有n个节点,每个节点有对应的名字(名字可重复). 每次询问,求深度比$vi$多$ki$的$vi$的儿子中,有多少种名字 分析: Step1: 我们可以懂$DFS$轻松找到每个节点的深度dep[x], 同时用$DFS$序列得知每个节点间的关系(也就是说,可以用in[x]与ou[x],来知道另一个节点$v$是不是$x$的儿子). 做完以上工作,本题所求的结果即是 已知深度dep,求in[x]在in[father]~ou[father]中的$x$,他们名字共有多少种 St…
[cf contest246] E - Blood Cousins Return time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Polycarpus got hold of a family tree. The found tree describes the family relations of n people, nu…
246E - Blood Cousins Return 题意 给出一棵家谱树,定义从 u 点向上走 k 步到达的节点为 u 的 k-ancestor,每个节点有名字,名字不唯一.多次查询,给出 u k,问以 u 为根节点的子树下有多少个深度为 dep[u] + k 的节点(dep[u] 为节点 u 的深度). 分析 和208E - Blood Cousins几乎相同,把那题的 \(C\) 数组换成一个 \(set\) 数组,表示某子树下同一深度所有名字的集合. code #include<bit…
题目链接 Blood Cousins Return #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) ; string s[N]; int ans[N], sz[N], h[N]; bool skip[N]; vector <int> v[N]; vector < pair<int, int> > query[…
题意: 一个森林,求k级后代中多少种不同的权值 用set维护每个深度出现的权值 一开始一直在想删除怎么办,后来发现因为当前全局维护的东西里都是当前子树里的,如果要删除那么当前一定是轻儿子,直接清空set就行了没关系不会把一些要保留的也删除了 哈希直接上map #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector>…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! 题目链接:codeforces246E 正解:$dsu$ $on$ $tree$ 解题报告: 又是套路题… 用一个$map$存一下每个深度的每种字符串出现次数,另外开一个数组记录一下每个深度的$ans$,然后离线做. //It is made by ljh…
208E - Blood Cousins 题目:给出一棵树,问与节点v的第k个祖先相同的节点数有多少个. 分析: 寻找节点v的第k个祖先,这不就是qtree2简化版吗,但是怎么统计该祖先拥有多少个深度为k的儿子? 我们可以对于深度为d的所有节点放到一个数组中,这时需要知道的是深度为d的数组中某个连续区间都属于该子树的长度. 某棵子树的信息?这时可以考虑一下dfs序列... dfs序列把整棵子树放在同一个区间,不懂dfs序的可以做做这两题: BZOJ 1103 [POI2007]大都市meg,BZ…
208E - Blood Cousins 题意 给出一棵家谱树,定义从 u 点向上走 k 步到达的节点为 u 的 k-ancestor.多次查询,给出 u k,问有多少个与 u 具有相同 k-ancestor 的节点. 分析 设 rt 为 u 的 k-ancestor.问题可以转换成在以 rt 为根的子树下,有多少个节点的深度与 u 相同. 预处理出离 u 距离为 k 的祖先 rt . 我们可以把所有的查询用向量存起来(祖先节点,要查询的节点的深度,对应查询的id),在遍历到某个祖先节点时,统计…
Blood Cousins 题目描述 小C喜欢研究族谱,这一天小C拿到了一整张族谱. 小C先要定义一下k-祖先. x的1-祖先指的是x的父亲 x的k-祖先指的是x的(k-1)-祖先的父亲 小C接下来要定义k-兄弟 xx的k-兄弟指的是与x的k-祖先相同的人 如果不存在k-祖先那么x没有k-兄弟 小C想问问你,xx到底有多少k-兄弟?小C打算问QQ次这样的问题. 输入格式 第一行11个数nn,表示族谱中的人数,从11开始编号. 接下来一行nn个数,第ii个数r_iri​指的是ii的父亲,如果为0,…
题意:给出一个森林,求和一个点有相同k级祖先的点有多少 倍增求父亲然后和上题一样还不用哈希了... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; typedef long long ll; #define pii pair<int, int> #de…