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

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n, k, m, dfnl[100005], dfnr[100005], idx, rot[100005], v[100005], uu, vv, cnt;
int hea[100005], fan[100005], tot;
struct Edge{
int too, nxt, val;
}edge[200005];
struct Node{
int l, r, sum;
}nd[3333333];
void add_edge(int fro, int too){
edge[++cnt].nxt = hea[fro];
edge[cnt].too = too;
hea[fro] = cnt;
}
void dfs(int x, int f){
dfnl[x] = ++idx;
fan[idx] = x;
for(int i=hea[x]; i; i=edge[i].nxt){
int t=edge[i].too;
if(t!=f) dfs(t, x);
}
dfnr[x] = idx;
}
int update(int pre, int x, int p){
int re=++tot;
nd[re] = nd[pre];
nd[re].sum++;
if(p<0)
return re;
int tmp=(x>>p)&1;
if(tmp) nd[re].r = update(nd[pre].r, x, p-1);
else nd[re].l = update(nd[pre].l, x, p-1);
return re;
}
int query(int pre, int now, int x, int p){
if(p<0) return 0;
int tmp=(x>>p)&1;
if(tmp){
int sum=nd[nd[now].l].sum-nd[nd[pre].l].sum;
if(sum)
return query(nd[pre].l, nd[now].l, x, p-1)+(1<<p);
else
return query(nd[pre].r, nd[now].r, x, p-1);
}
else{
int sum=nd[nd[now].r].sum-nd[nd[pre].r].sum;
if(sum)
return query(nd[pre].r, nd[now].r, x, p-1)+(1<<p);
else
return query(nd[pre].l, nd[now].l, x, p-1);
}
}
int main(){
while(scanf("%d %d %d", &n, &k, &m)!=EOF){
memset(hea, 0, sizeof(hea));
idx = tot = cnt = 0;
for(int i=1; i<=n; i++)
scanf("%d", &v[i]);
for(int i=1; i<n; i++){
scanf("%d %d", &uu, &vv);
add_edge(uu, vv);
add_edge(vv, uu);
}
dfs(k, 0);
for(int i=1; i<=n; i++)
rot[i] = update(rot[i-1], v[fan[i]], 30);
while(m--){
scanf("%d %d", &uu, &vv);
printf("%d\n", query(rot[dfnl[uu]-1], rot[dfnr[uu]], vv, 30));
}
}
return 0;
}

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. Angular ui-route介绍

    参考博客: https://www.cnblogs.com/haogj/p/4885928.html 原文地址:http://www.ng-newsletter.com/posts/angular-u ...

  2. [转]C#中StreamReader读取中文出现乱码

    摘自:C#中StreamReader读取中文出现乱码 原因是自Windows 2000之后的操作系统在文件处理时默认编码采用Unicode所以.NET文件的默认编码也是Unicode.除非另外指定,S ...

  3. linux服务器免密钥登录

    方法一:通过下载服务器私钥方式 服务器端执行: ssh-keygen -t rsa -b 4096 cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys ...

  4. iOS 提交form表单,上传图片

    之前不会用,总感觉很难,用后感觉不是太难,本文只是简单的讲一下怎么使用的, //实例话对象 AFHTTPSessionManager *manager = [AFHTTPSessionManager ...

  5. 《GPU高性能编程CUDA实战中文》中第四章的julia实验

    在整个过程中出现了各种问题,我先将我调试好的真个项目打包,提供下载. /* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. ...

  6. 问题004:如何在windows中打开命令行,有几种方法?

    第一种方法:按快捷键 Win+R (run),然后运行框中输入cmd. 第二种方法:开始菜单-->运行-->然后运行框中输入cmd. 第三种方法:在附件当中,找命令行选项即可.

  7. 关于HTML(含HTML5)的块级元素和行级(内联)元素总结

    1.首先我们要知道什么是块级元素和行级(内联)元素? 块级(block)元素的特点: ①总是在新行上开始: ②高度,行高以及外边距和内边距都可控制: ③宽度缺省是它的容器的100%,除非设定一个宽度: ...

  8. react 的虚拟dom

    前端优化的主要方面就是减少页面的DOM操作,减少重排和重绘,React在这方面做了优化,采用了所谓的虚拟DOM,其实我们平时也会遇到虚拟DOM,只是你没有注意罢了,请听我娓娓道来.  所谓的虚拟DOM ...

  9. axios常见传参方式

    1:get请求 一般发送请求是这么写 axios.get('/user?id=12345&name=user') .then(function (res) { console.log(res) ...

  10. linux下/dev/null被误删

    /dev/null文件是一个特殊的设备文件,可以用于清空一些日志文件,或者是使一些信息输出到此文件,用以节省硬盘空间.如果该空文件/dev/null文件被误删除掉, 如何再使用系统命令重新创建并设置该 ...