可持久化trie。考场上我脑补了一个trie树合并也A了

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. using namespace std;
  5. int n, k, m, dfnl[100005], dfnr[100005], idx, rot[100005], v[100005], uu, vv, cnt;
  6. int hea[100005], fan[100005], tot;
  7. struct Edge{
  8. int too, nxt, val;
  9. }edge[200005];
  10. struct Node{
  11. int l, r, sum;
  12. }nd[3333333];
  13. void add_edge(int fro, int too){
  14. edge[++cnt].nxt = hea[fro];
  15. edge[cnt].too = too;
  16. hea[fro] = cnt;
  17. }
  18. void dfs(int x, int f){
  19. dfnl[x] = ++idx;
  20. fan[idx] = x;
  21. for(int i=hea[x]; i; i=edge[i].nxt){
  22. int t=edge[i].too;
  23. if(t!=f) dfs(t, x);
  24. }
  25. dfnr[x] = idx;
  26. }
  27. int update(int pre, int x, int p){
  28. int re=++tot;
  29. nd[re] = nd[pre];
  30. nd[re].sum++;
  31. if(p<0)
  32. return re;
  33. int tmp=(x>>p)&1;
  34. if(tmp) nd[re].r = update(nd[pre].r, x, p-1);
  35. else nd[re].l = update(nd[pre].l, x, p-1);
  36. return re;
  37. }
  38. int query(int pre, int now, int x, int p){
  39. if(p<0) return 0;
  40. int tmp=(x>>p)&1;
  41. if(tmp){
  42. int sum=nd[nd[now].l].sum-nd[nd[pre].l].sum;
  43. if(sum)
  44. return query(nd[pre].l, nd[now].l, x, p-1)+(1<<p);
  45. else
  46. return query(nd[pre].r, nd[now].r, x, p-1);
  47. }
  48. else{
  49. int sum=nd[nd[now].r].sum-nd[nd[pre].r].sum;
  50. if(sum)
  51. return query(nd[pre].r, nd[now].r, x, p-1)+(1<<p);
  52. else
  53. return query(nd[pre].l, nd[now].l, x, p-1);
  54. }
  55. }
  56. int main(){
  57. while(scanf("%d %d %d", &n, &k, &m)!=EOF){
  58. memset(hea, 0, sizeof(hea));
  59. idx = tot = cnt = 0;
  60. for(int i=1; i<=n; i++)
  61. scanf("%d", &v[i]);
  62. for(int i=1; i<n; i++){
  63. scanf("%d %d", &uu, &vv);
  64. add_edge(uu, vv);
  65. add_edge(vv, uu);
  66. }
  67. dfs(k, 0);
  68. for(int i=1; i<=n; i++)
  69. rot[i] = update(rot[i-1], v[fan[i]], 30);
  70. while(m--){
  71. scanf("%d %d", &uu, &vv);
  72. printf("%d\n", query(rot[dfnl[uu]-1], rot[dfnr[uu]], vv, 30));
  73. }
  74. }
  75. return 0;
  76. }

SXCPC2018 nucoj2004 国王的怪癖的更多相关文章

  1. bzoj3157国王奇遇记(秦九韶算法+矩乘)&&bzoj233AC达成

    bz第233题,用一种233333333的做法过掉了(为啥我YY出一个算法来就是全网最慢的啊...) 题意:求sigma{(i^m)*(m^i),1<=i<=n},n<=10^9,m ...

  2. NOIP2012国王游戏

      题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在 ...

  3. [NOIP2012] 提高组 洛谷P1080 国王游戏

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...

  4. nyoj925_国王的烦恼_并查集

    国王的烦恼 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能 ...

  5. javaScript怪癖分析

    最近了解到javascript中有些编程怪癖现象,很有意思,有必要总结一下: 1.未知变量名创建全局变量 在我们平常的编写javascript程序的时候,有的人写法不是很正规,在定义变量的时候 直接定 ...

  6. ACM 国王的魔镜

    国王的魔镜 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的. 比如一 ...

  7. 【NOIP2012】国王游戏

    这一次高精度完美地过辣好开心OvO,还get到了非常方便的高精度除小于10000的方法,这个是我自己脑出来的OvO 看来下午高精度傻逼得值qvq 原题: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个 ...

  8. 【BZOJ】【3157】&【BZOJ】【3516】国王奇遇记

    数论 题解:http://www.cnblogs.com/zhuohan123/p/3726933.html copy一下推导过程: 令$$S_i=\sum_{k=1}^{n}k^im^k$$ 我们有 ...

  9. 「译」JavaScript 的怪癖 1:隐式类型转换

    原文:JavaScript quirk 1: implicit conversion of values 译文:「译」JavaScript 的怪癖 1:隐式类型转换 译者:justjavac 零:提要 ...

随机推荐

  1. vue安装及环境搭建

    vue项目在pycharm里运行需要安装一个插件,打开settings,找到plugins,里面搜索vue.js,点击安装. vue安装 先安装node.js npm install -g @vue/ ...

  2. 分享几道经典的javascript面试题

    这几道题目还是有一点意思的,大家可以研究一番,对自己的技能提升绝对有帮助. 1.调用过程中输出的内容是什么 function fun(n, o) { console.log(o); return { ...

  3. MobaXterm连接远程Linux服务器

    MobaXterm是一个X服务器和一组的Unix命令(GNU/ Cygwin的)封装在一个单一的便携式exe文件的增强终端. MobaXterm包括一个巨大的multitab原生的Windows终端. ...

  4. linux性能测试脚本

    http://linux-bench.com/ What is Linux-Bench? Linux-Bench is a simple script that provides a basic le ...

  5. tp3.2.3自定义全局函数的使用

    全局函数的定义,好处就是我们可以跨文件使用,而且调用方式可以直接调用,十分方便,在这里做个小记录 1.在Application/Home/Common目录下面新建一个名为function.php的文件 ...

  6. MYSQL短索引

    优化MYSQL时,可以尽量使用短索引,如果只是为了提高读取的速度,可以优先使用聚合索引,把几个字段聚集在一起,当然缺点在于操作(写)的时候会降低效率,短索引一般都是开头几个字符基本不同的时候,可以考虑 ...

  7. 【BZOJ3123】[SDOI2013] 森林(启发式合并主席树)

    点此看题面 大致题意: 给你一片森林,有两种操作:询问两点之间的第\(k\)小点权和在两棵树之间连一条边. 前置技能:树上主席树 做这道题目,我们首先要会树上主席树. 关于树上主席树,这有一道很好的例 ...

  8. Linux一键脚本合集vps

    首先,想说说一键脚本流行的原因何在? 众所周知的是,Linux 是占据大半壁江山的服务器系统,但在桌面上的占有率可就远不是那么回事儿了,使用和熟悉 Linux 的人远没有 Windows 多,但又因为 ...

  9. python_71_json序列化1

    #序列化:序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程. #本例把字典数据类型存成字符串存在硬盘 #文件只能存字符串和二进制码,字典之类的不可以 info={ ...

  10. python_44_文件属性

    #打印文件属性信息 import os#os.stat()返回的文件属性元组元素的含义 filestats=os.stat('yesterday')#获取文件/目录的状态 print(filestat ...