E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
570D
Codeforces
570D
Tree Requests
Codeforces570DTreeRequestsdsuontree题意给一棵树,每个节点有一个字母。一些查询Q(x,d),查询x及其子树中,与根节点距离为d的所有字母是否可以构成回文串。思路两种思路,dfs序+树状数组或dsuontree。dfs序+树状数组我们可以跑一遍dfs序,这样子树在dfs序中连续。dfs时同时处理出距根所有距离的节点。然后离线询问,按深度排序,开26个树状数组。处理到
xzxxzx401
·
2020-08-24 11:46
dsu-on-tre
2017暑假
数据结构
线段树
CodeForces -
570D
Tree Requests (树上启发式合并)
CodeForces-570D题目大意:给出一个节点u问,节点u的子树中在深度为h的节点能不能组成一个回文串。解题思路:寒假训练赛的一个题目,当时也不会,补题的时候用dfs序+二分写的。后来发现能用启发式合并写。当时二分差点挂了,果然树上启发式合并跑的飞快。。。。#includeusingnamespacestd;#defineLLlonglong#definesca(x)scanf("%d",&
_leon1999
·
2020-08-24 11:45
树上启发式合并
Codeforces
570D
Tree Requests
D.TreeRequeststimelimitpertest2secondsmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputRomanplantedatreeconsistingofnvertices.EachvertexcontainsalowercaseEnglishletter.Vertex1isther
weixin_30414635
·
2020-08-24 10:49
【CF
570D
】Tree Requests
【CF570D】TreeRequests树节点标号递增规定父亲标号#defineINF0x3f3f3f3fusingnamespacestd;typedefstructEdge{intv,next;}Edge;charstr[500005];setdep[500001];set::iteratorit;Edgeeg[500000];inthead[500001],hn[500001];intin[
小胡子Haso
·
2020-08-24 07:38
CF
DFS&BFS
codeforces
570D
一个字符串能重排成回文串等价于这个字符串最多只有一个字符出现次数为奇数次这题的询问和子树中深度有关,那么显然可以用dsuontree解决把询问离线下来挂在点上,然后按dsuontree的顺序统计子树信息即可复杂度\(O(nlogn+26m)\)1#include2#definemaxn5000053usingnamespacestd;4intn,m;5chars[maxn];6vectorg[ma
幽蝶
·
2020-02-10 12:00
570D
Tree Requests (dsu_on_tree)
传送门:https://codeforces.com/contest/570/problem/D题目大意:给一棵树,每个节点有一个字母,问节点v的深度为h的儿子节点的所有字母能否组成一个回文串(深度是对于整棵树)很裸的一个树上合并,也可以使用二分来做//919ms#includeusingnamespacestd;constintmaxn=5e5+5;vectore[maxn];vector>qu
半世blue
·
2018-09-05 19:21
数据结构
CodeForces
570D
(dfs序 or 离线dfs)
题目意思: 给定一颗root为1的树,节点最多5e5个,每个节点有一个英文字母,要求在指定子树根节点x,和指定深度y,求该子树y深度所有节点的字母能不能组成回文串。解法1: 利用dfs序,为所有点标上进出两个标记,既可以代表一个区间(dfs序很重要的一个应用),顺便将每个深度下所有的单个字母出现的标号统计到相应的vector中后,在计算答案时进行26次二分上下界求这个子树区间分别有多少a--z
playwfun
·
2016-04-06 14:00
Codeforces
570D
Tree Requests 题解&代码
上周的最后一道题解!补!完!了!啊补题解补到想吐是什么体验…我现在算是了解了题意:给出一颗n个点的多叉树,每个点都有一个对应字母(不唯一)和一个对应编号(唯一)。然后有m组询问,每一组询问给出一个v和一个h,表示节点v所在的子树中深度是h的节点【深度是说从根节点向下计算的总深度】中包含的字母,如果这些字母可以组成回文串,输出Yes,否则输出No思路:dfs处理一遍dfs序,按照深度一遍一遍加树状数
Rainbow6174
·
2016-01-20 18:00
DFS
codeforces
【Codeforces
570D
】Tree Requests dfs序+二分
D.TreeRequeststimelimitpertest2secondsmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputRomanplantedatreeconsistingofnvertices.EachvertexcontainsalowercaseEnglishletter.Vertex1isther
ALPS233
·
2016-01-15 20:00
DFS
codeforces
Codeforces
570D
Tree Requests(DFS重标号+树状数组)
能成为回文串的显然是数量为奇数的字母小于2个。问题转化成求范围内点中各种字母总个数。把询问离线处理,按照层数排序,就可以把每一层分开处理了。剩下的问题就是处理子树。如果能构造出一个序列使同一棵子树的节点都连续在一起。就可以转化为一个区间查询问题。DFS对节点的访问顺序刚好满足这个性质。在DFS过程中对每个节点重新标号,并对于每个节点,记录进入该节点时的最大标号(就是自己的标号)和出该节点的最大标号
Baoli1008
·
2015-08-20 08:00
树状数组
DFS重标号
【CF
570D
】Tree Requests
【CF570D】TreeRequests树节点标号递增规定父亲标号 #defineINF0x3f3f3f3f usingnamespacestd; typedefstructEdge { intv,next; }Edge; charstr[500005]; setdep[500001]; set::iteratorit; Edgeeg[500000]; inthead[500001],hn[
ChallengerRumble
·
2015-08-17 15:00
重标号区间遍历
上一页
1
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他