题意:给定一棵树,树上每个节点有对应的字符,多次询问在\(u\)子树的深度为\(d\)的所有节点上的字符任意组合能否凑成一个回文串

把dfs序存储在一个二维线性表中,一个维度记录字符另一个维度记录深度
因为dfs序是单调递增的,所以每个二维表的值也是单调递增的
那么只需用两次二分把合法的儿子搞出来就行

感觉是个比较奇怪的姿势,总之学习了
//时间空间都这么暴力真的大丈夫?

#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i=j;i<=k;i++)
#define rrep(i,j,k) for(register int i=j;i>=k;i--)
#define erep(i,u) for(register int i=head[u];~i;i=nxt[i])
#define print(a) printf("%lld",(ll)(a))
#define println(a) printf("%lld\n",(ll)(a))
#define printbk(a) printf("%lld ",(ll)(a))
using namespace std;
const int MAXN = 5e5+11;
typedef long long ll;
ll read(){ll x=0,f=1;register char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
int to[MAXN<<1],nxt[MAXN<<1],head[MAXN],tot;
int CLOCK,st[MAXN],ed[MAXN],n,m;
char str[MAXN];
vector<int> save[MAXN][27];
void init(){memset(head,-1,sizeof head);tot=CLOCK=0;
}
void add(int u,int v){to[tot]=v;nxt[tot]=head[u];head[u]=tot++;swap(u,v);to[tot]=v;nxt[tot]=head[u];head[u]=tot++;
}
void dfs(int u,int p,int d){st[u]=++CLOCK;save[d][str[u]-'a'].push_back(st[u]);erep(i,u){int v=to[i];if(v==p)continue;dfs(v,u,d+1);}ed[u]=CLOCK;
}
int main(){while(cin>>n>>m){init();rep(i,2,n) add(i,read());scanf("%s",str+1);memset(save,0,sizeof save);dfs(1,-1,1);rep(i,1,m){int u=read();int d=read();bool flag=0,fflag=0;rep(j,0,25){vector<int>::iterator it1=lower_bound(save[d][j].begin(),save[d][j].end(),st[u]);vector<int>::iterator it2=upper_bound(save[d][j].begin(),save[d][j].end(),ed[u]);int cha=it2-it1;if((cha&1)&&!flag) flag=1;else if((cha&1)&&flag){fflag=1;break;}}if(fflag) printf("No\n");else printf("Yes\n");}}return 0;
}

转载于:https://www.cnblogs.com/caturra/p/8986811.html

Codeforces - 570D 离散DFS序 特殊的子树统计 (暴力出奇迹)相关推荐

  1. Military Problem CodeForces 1006E (dfs序)

    J - Military Problem CodeForces - 1006E 就是一道dfs序的问题 给定一个树, 然后有q次询问. 每次给出u,k, 求以u为根的子树经过深搜的第k个儿子,如果一个 ...

  2. A and B and Lecture Rooms CodeForces - 519E LCA+dfs序

    看到这个题的第一个思路就是就是统计以每一个点为根的所有节点个数,然后具体就分情况讨论一下即可. 因为刚刚学习了dfs序,这个题就用了dfs序来通过进出时间戳来相减表示其为根的子节点个数. 分情况 我们 ...

  3. 牛客 - 红蓝图(克鲁斯卡尔重构树的dfs序上建主席树)

    题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,每条边都有边权和颜色,颜色分为红色和蓝色,现在有 q 次相互独立的操作,每次操作会询问 ( x , t ) ,问删除掉所有权值 ...

  4. HDU - 5692 Snacks(dfs序+线段树)

    题目链接:点击查看 题目大意:中文题目,不多赘述 题目分析:因为要求路线上权值和最大,我们可以用前缀和的思想来储存,故我们需要来维护最大值,可以用线段树来维护最大值,若想用线段树的话,前提必须是线性区 ...

  5. BZOJ 4285 使者 (CDQ分治+dfs序)

    题目传送门 题目大意:给你一棵树,有三种操作,在两个点之间连一个传送门,拆毁一个已有的传送门,询问两个点之间的合法路径数量.一条合法路径满足 1.经过且仅经过一个传送门 2.不经过起点终点简单路径上的 ...

  6. DFS序——树链剖分前驱知识

    目录 定义:dfs序:每个节点在dfs深度优先遍历中的进出栈的时间序列. 性质:dfs序可以把一棵树区间化,即可以求出每个节点的管辖区间. 对于一棵树的dfs序而言,同一棵子树所对应的一定是dfs序中 ...

  7. Apple Tree(树状数组+dfs序+邻接表数组(链式前向星) )

    链接:http://poj.org/problem?id=3321 Description There is an apple tree outside of kaka's house. Every ...

  8. 570D Codeforces Round #316 (Div. 2) D(dfs序,时间戳,二分

    题目:一棵树上每个节点有个字符值,询问每个节点的深度为h的子节点的字符是否能组成一个回文串. 思路:首先是奇妙的dfs序和时间戳,通过记录每个节点的dfs进出时间,可以发现某个节点的子节点的进出时间均 ...

  9. Codeforces 375D - Tree and Queries(dfs序+莫队)

    题目链接:http://codeforces.com/contest/351/problem/D 题目大意:n个数,col[i]对应第i个数的颜色,并给你他们之间的树形关系(以1为根),有m次询问,每 ...

  10. Codeforces Round #316 (Div. 2) D. Tree Requests dfs序

    题目链接: 题目 D. Tree Requests time limit per test:2 seconds memory limit per test:256 megabytes 问题描述 Rom ...

最新文章

  1. Ubuntu 必装软件及安装教程
  2. 2018年是VR的新机会吗?
  3. java怎么学好 用好接口_Java公开课|Java的实现接口怎么用,这才是学习好Java必备的实用函数,你会吗...
  4. 和csm_CSM媒介研究首发短视频用户价值研究报告
  5. 那就是我mdash;mdash;大名鼎鼎的C++缪博士
  6. 单片机反相器_小白学单片机 :AT89S51单片机基本硬件结构认识(3)
  7. 链表C++ | 实现头部、尾部插入数据_1
  8. shell脚本--部署应用到tomcat并启动tomcat
  9. PHP内存溢出:Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes)
  10. Python深度学习三剑客,你集齐了吗?
  11. matlab小波分析
  12. JS根据城市名称获取所在省份
  13. linux下mysql修改时区,linux修改系统时区
  14. 北大计算机科学系 97届,北大一专业:六代单传、一人旷课全系放假,毕业照只有一个人...
  15. 万字讲解OpenWrt防火墙iptables,并使用UCI配置防火墙
  16. 当使用VMware给虚拟机扩展硬盘容量时,显示无法扩展容量并提示:在部分链上无法执行所调用的函数,请打开父虚拟磁盘。
  17. 部分蓝牙耳机 电脑 连接 不畅 的处理办法
  18. STI、LOD与WPE概念:形成机理及对电路设计的影响
  19. MySQL自学笔记详细版(从安装到入门)
  20. 消失的“金九银十” 互联网的下一个五年在哪里?

热门文章

  1. linux修改时区不用重启服务,Linux修改时区不用重启的方法
  2. 双一流2020年调整时间_“双一流”调整名单预测,985大学两升一降,两校退出名校阵营...
  3. 【Django 2021年最新版教程5】前端传递数据到后端处理 GET 方法
  4. python 递归目录和文件 修改主组_python下递归遍历目录和文件的方法介绍
  5. java servlet JSP 区别_servlet和jsp的区别
  6. 雷迪9000使用说明_华为全力出击!折叠屏新旗舰亮相,麒麟9000+内外双屏
  7. idea快捷键自动生成序列化id
  8. jq向php文件传json,jQuery向后台传入json格式数据的方法
  9. java 2d 图形_Java学习笔记--Swing2D图形
  10. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_7 Mybatis中参数的深入-使用实体类的包装对象作为查询条件...