题解:

更据题意,在树上深度为没一个数的都放在一起,要用的时候二分出来,看结果

用c++的数据结构

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=5e5+,L=;
  4. char s[N];
  5. int n,m,cnt=,max_h=,high[N];
  6. vector<int>E[N],A[N],B[N];
  7. pair<int,int>order[N];
  8. void dfs(int x,int h)
  9. {
  10. max_h=max(h,max_h);
  11. high[x]=h;
  12. order[x].first=++cnt;
  13. A[h].push_back(<<(s[x-]-'a'));
  14. B[h].push_back(cnt);
  15. for (int i=;i<E[x].size();i++)dfs(E[x][i],h+);
  16. order[x].second=cnt;
  17. }
  18. int solve(int x,int h)
  19. {
  20. if (h<=high[x]||!B[h].size())return ;
  21. int l=(int)(lower_bound(B[h].begin(),B[h].end(),
  22. order[x].first)-B[h].begin());
  23. int r=(int)(upper_bound(B[h].begin(),B[h].end(),
  24. order[x].second)-B[h].begin()-);
  25. if (l>r)return ;
  26. int ans=A[h][r]^(l?A[h][l-]:);
  27. if (ans==(ans&(-ans)))return ;
  28. return ;
  29. }
  30. int read()
  31. {
  32. char c=;int x=;
  33. for(;c<''||c>'';c=getchar());
  34. for(;c>=''&&c<='';c=getchar())x=x*+c-'';
  35. return x;
  36. }
  37. int main()
  38. {
  39. n=read();m=read();
  40. for (int i=;i<=n;i++)E[read()].push_back(i);
  41. scanf("%s",&s);
  42. dfs(,);
  43. max_h++;
  44. for (int i=;i<max_h;i++)
  45. for (int j=;j<A[i].size();j++)A[i][j]^=A[i][j-];
  46. while (m--)
  47. {
  48. int v=read(),h=read();
  49. if (solve(v,h-))puts("Yes");
  50. else puts("No");
  51. }
  52. }

51nod1513的更多相关文章

随机推荐

  1. 使用fragment添加底部导航栏

    切记:fragment一定要放在framlayout中,不然不会被替换完全(就是切换之后原来的fagment可能还会存在) main.xml <LinearLayout xmlns:androi ...

  2. 嵌入式C语言--面试题

    C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法.这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是 ...

  3. linux下如何使用命令行配置网络

    答:一共分成以下几个步骤: 注:笔者使用的是ubuntu 1.设置ip sudo ifconfig eth0 192.168.1.121 2.设置网关 sudo route add default g ...

  4. cmder的使用和编码问题解决

    cmder 是一款 windows 下的命令集合软件,它可以集合各种系统下的命令,并且操作非常快速方便.安装有两个版本,一个是简化版(4.27M),一个是完全版(75.7M),它们的唯一区别:完全版包 ...

  5. Vim打开文件中文乱码如何解决?

    今天想找一下之前的随机数组demo复习,在源文件src里用vim打开.java文件,中文出现乱码 vim也是,选项里没有直接选择设置utf-8之类的 查了下网上,http://easwy.com/bl ...

  6. ROS编译时(catkin_make)找不到bullet,Could NOT find Bullet (missing: BULLET_DYNAMICS_LIBRARY

    sudo apt-get install libbullet-dev

  7. C++ Boost在VS2015中的使用

    1.下载包 目录结构: 切换到上面的目录,然后运行 bootstrap.bat 执行完毕后会生成两个exe文件 继续执行 bjam.exe 结束后,目录如下 2.设置路径 测试 #include &q ...

  8. JMeter源码导入到Intellij IDEA

    环境: Windows10,jdk1.8,Intellij IDEA 2018.1.5 x64,apache-jmeter-4.0_src.zip  http://jmeter.apache.org/ ...

  9. django 动态生成CSV文件

    CSV (Comma Separated Values),以纯文本形式存储数字和文本数据的存储方式.纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样的数据.CSV文件由任意数目的记录组成,记 ...

  10. shell 特殊变量详解

    $0 获取当前执行脚本的名称,包括路径 [root@centos test]# cat test.sh echo $0 [root@VM_102_244_centos test]# bash test ...