题意:给定一棵树,树上每个节点有对应的字符,多次询问在\(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;
}

最新文章

  1. android Intent介绍
  2. 浏览器中CSS的BUG
  3. 仿微软控件的html元素
  4. Windows Store App 全球化:在后台代码中引用字符串资源
  5. 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)
  6. BLE-NRF51822-实现简单扫描器
  7. Qt QTreeWidget 树形结构实现(转)
  8. DevExpress GridControl 复合表头/表头分层设计.
  9. MFC 创建选项卡
  10. 在Ubuntu下直接通过SSH登录到OpenWrt
  11. Entity Framework 帮助文档
  12. base64格式图片转换为FormData对象进行上传
  13. 前端笔记之JavaScript面向对象(一)Object&amp;函数上下文&amp;构造函数&amp;原型链
  14. 初始Vue
  15. MySQL学习笔记Windows篇&lt;一&gt; Welcome to MySQL
  16. JMeter中各种请求格式--aduocd的博客
  17. openVswitch(OVS)源代码分析之工作流程(数据包处理)
  18. perl ExtUtils::Manifest
  19. ubuntu 杂记
  20. 《PHP对象、模式与实践》之高级特性

热门文章

  1. Virtual Machine Definition File 2.2
  2. 批量添加数据SqlBulkCopy
  3. PCL 编程多个点云合成
  4. jQuery--全选、反选、取消
  5. Mybatis XML 配置文件
  6. [GO]工程管理
  7. Debian7安装后的配置(英文环境chromium浏览器中汉字变成方块的问题)
  8. MongoDB整理笔记のMapReduce
  9. query聚类技术
  10. super() 的入门使用