BZOJ2819 Nim(DFS序)

题目:单点修改、树链查询。

 

可以直接用树链剖分做。。

修改是O(QlogN),查询是O(QlogNlogN),Q=N=500000;

听说会超时。。

 

这题也可以用DFS序来做。

先不看修改,单单查询:可以求出每个点到根的xor值,那么对任意两点的查询就等于xor(u)^xor(v)^val(lca(u,v));

如果有修改:修改仅仅是单个点,而维护的只是点到根的路径,因此修改仅仅会影响到以这个点为根的子树的所有结点到根的信息。

所以用DFS序把子树们化为连续区间用线段树维护,修改本质上是个线段树的区间修改,查询是个单点查询。

每次修改和查询都是O(logN)。

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 using namespace std;
  5 #define MAXN 550000
  6 struct Edge{
  7     int v,nxt;
  8 }edge[MAXN<<1];
  9 int NE,head[MAXN];
 10 void addEdge(int u,int v){
 11     edge[NE].v=v; edge[NE].nxt=head[u]; head[u]=NE++;
 12 }
 13 int n,stone[MAXN];
 14 int odr,stack[MAXN],l[MAXN],r[MAXN],dep[MAXN],fa[20][MAXN],val[MAXN];
 15 void dfs(){
 16     int top=0;
 17     stack[++top]=1;
 18     val[1]=stone[1];
 19     while(top){
 20         int u=stack[top];
 21         if(l[u]){
 22             r[u]=odr; --top;
 23             continue;
 24         }
 25         l[u]=++odr;
 26         for(int i=head[u]; i!=-1; i=edge[i].nxt){
 27             int v=edge[i].v;
 28             if(fa[0][u]==v) continue;
 29             fa[0][v]=u; dep[v]=dep[u]+1; val[v]=val[u]^stone[v]; stack[++top]=v;
 30         }
 31     }
 32 }
 33 
 34 int tree[MAXN<<2],N,x,y,z;
 35 void update(int i,int j,int k){
 36     if(x<=i && j<=y){
 37         tree[k]^=z;
 38         return;
 39     }
 40     if(tree[k]){
 41         tree[k<<1]^=tree[k]; tree[k<<1|1]^=tree[k];
 42         tree[k]=0;
 43     }
 44     int mid=i+j>>1;
 45     if(x<=mid) update(i,mid,k<<1);
 46     if(y>mid) update(mid+1,j,k<<1|1);
 47 }
 48 int query(int i,int j,int k){
 49     if(i==j) return tree[k];
 50     if(tree[k]){
 51         tree[k<<1]^=tree[k]; tree[k<<1|1]^=tree[k];
 52         tree[k]=0;
 53     }
 54     int mid=i+j>>1;
 55     if(x<=mid) return query(i,mid,k<<1);
 56     return query(mid+1,j,k<<1|1);
 57 }
 58 
 59 int lca(int u,int v){
 60     if(dep[u]>dep[v]) swap(u,v);
 61     for(int k=0; k<20; ++k){
 62         if((dep[v]-dep[u])>>k&1){
 63             v=fa[k][v];
 64         }
 65     }
 66     if(v==u) return u;
 67     for(int k=19; k>=0; --k){
 68         if(fa[k][u]!=fa[k][v]){
 69             u=fa[k][u];
 70             v=fa[k][v];
 71         }
 72     }
 73     return fa[0][u];
 74 }
 75 void init(){
 76     dfs();
 77     for(int i=1; i<20; ++i){
 78         for(int j=1; j<=n; ++j){
 79             int t=fa[i-1][j];
 80             if(t) fa[i][j]=fa[i-1][t];
 81         }
 82     }
 83     for(N=1; N<odr; N<<=1);
 84     for(int i=1; i<=n; ++i){
 85         x=l[i]; y=l[i]; z=val[i];
 86         update(1,N,1);
 87     }
 88 }
 89 int main(){
 90     int q,a,b;
 91     char op[11];
 92     memset(head,-1,sizeof(head));
 93     scanf("%d",&n);
 94     for(int i=1; i<=n; ++i){
 95         scanf("%d",stone+i);
 96     }
 97     for(int i=1; i<n; ++i){
 98         scanf("%d%d",&a,&b);
 99         addEdge(a,b);
100         addEdge(b,a);
101     }
102     init();
103     scanf("%d",&q);
104     while(q--){
105         scanf("%s%d%d",op,&a,&b);
106         if(op[0]=='Q'){
107             int res;
108             x=l[a]; res=query(1,N,1);
109             x=l[b]; res^=query(1,N,1);
110             res^=stone[lca(a,b)];
111             if(res) puts("Yes");
112             else puts("No");
113         }else{
114             x=l[a]; y=r[a]; z=b^stone[a];
115             update(1,N,1);
116             stone[a]=b;
117         }
118     }
119     return 0;
120 }

 

转载于:https://www.cnblogs.com/WABoss/p/4886918.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球CMOS图像传感器厂商最新排名:黑马杀出

来源&#xff1a;半导体行业观察近期&#xff0c;台湾地区的Yuanta Research发布报告&#xff0c;介绍了其对CMOS图像传感器(CIS)市场的看法&#xff0c;以及到2022年的前景预期。从该研究报告可以看出&#xff0c;2018年全球CMOS图像传感器的市场规模为137亿美元&#xff0c;其…

下载CIFAR-10、CIFAR-100数据集的方法

该网站的数据集目录MNISTCIFAR-10CIFAR-100STL-10SVHNILSVRC2012 task 1 网址&#xff1a;http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html

吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进一、任务介绍二、代码实现1.准备数据2.代价函数3.梯度计算4.带有正则化的代价函数和梯度计算5.拟合数据6.创建多项式特征7.准备多项式回归数据8.绘制学习曲线&#x1d706;0&#x1d706;1&…

刘锋 吕乃基:互联网中心化与去中心化之争

前言&#xff1a;本文发表在2019年5月《中国社会科学报》上&#xff0c;主要从神经学角度分析互联网的发育过程&#xff0c;并对云计算和区块链为代表的中心化与去中心化技术趋势进行了探讨。当前&#xff0c;学术界和产业界对互联网的未来发展出现了分歧。随着谷歌、亚马逊、F…

胶囊网络不同实现代码

* Keras w/ TensorFlow backend: https://github.com/XifengGuo/CapsNet-keras * TensorFlow: https://github.com/naturomics/CapsNet-Tensorflow * PyTorch: https://github.com/gram-ai/capsule-networks

iOS-BMK标注覆盖物

在iOS开发中&#xff0c;地图算是一个比较重要的模块。我们常用的地图有高德地图&#xff0c;百度地图&#xff0c;谷歌地图&#xff0c;对于中国而言&#xff0c;苹果公司已经不再使用谷歌地图&#xff0c;官方使用的是高德地图。下面将讲述一下百度地图开发过程中的一些小的知…

PyTorch框架学习二——基本数据结构(张量)

PyTorch框架学习二——基本数据结构&#xff08;张量&#xff09;一、什么是张量&#xff1f;二、Tensor与Variable&#xff08;PyTorch中&#xff09;1.Variable2.Tensor三、Tensor的创建1.直接创建Tensor&#xff08;1&#xff09;torch.tensor()&#xff08;2&#xff09;to…

十年空缺一朝回归,百度正式任命王海峰出任CTO

来源&#xff1a;机器之心百度要回归技术初心了吗&#xff1f;自 2010 年李一男卸任百度 CTO 之后&#xff0c;百度对这一职位就再无公开任命&#xff0c;一空就是 10 年。而今天上午李彦宏突然发出的一纸职位调令&#xff0c;让这个空缺多年的百度 CTO 之位有了新的掌舵手。就…

Windows下卸载TensorFlow

激活tensorflow&#xff1a;activate tensorflow输入&#xff1a;pip uninstall tensorflowProceed&#xff08;y/n&#xff09;:y如果是gpu版本&#xff1a; 激活tensorflow&#xff1a;activate tensorflow-gpu输入&#xff1a;pip uninstall tensorflow-gpuProceed&#xf…

大道至简第三章

大道至简读后感 这一章名为团队缺乏的不仅仅是管理&#xff0c;显而易见&#xff0c;这一章强调的就是作为一名软件工程实践者&#xff0c;团队协作的重要性。 这一章共分为八个小结&#xff0c;分别为三个人的团队&#xff0c;做项目 死亡游戏 ?&#xff0c;做 ISO 质量体系…

PyTorch框架学习三——张量操作

PyTorch框架学习三——张量操作一、拼接1.torch.cat()2.torch.stack()二、切分1.torch.chunk()2.torch.split()三、索引1.torch.index_select()2.torch.masked_select()四、变换1.torch.reshape()2.torch.transpace()3.torch.t()4.torch.squeeze()5.torch.unsqueeze()一、拼接 …

'chcp' 不是内部或外部命令,也不是可运行的程序

在cmd窗口中输入activate tensorflow时报错chcp 不是内部或外部命令&#xff0c;也不是可运行的程序 添加两个环境变量即可解决&#xff1a; 将Anaconda的安装地址添加到环境变量“PATH”&#xff0c;如果没有可以新建一个&#xff0c;我的安装地址是“D:\Anaconda”&#xf…

2019年全球企业人工智能发展现状分析报告

来源&#xff1a;199IT互联网数据中心《悬而未决的AI竞赛——全球企业人工智能发展现状》由德勤洞察发布&#xff0c;德勤中国科技、传媒和电信行业编译。为了解全球范围内的企业在应用人工智能技术方面的情况以及所取得的成效&#xff0c;德勤于2018年第三季度针对早期人工智能…

qt调动DLL

void func(void); // dll库中的函数 typedef void (*PFUNC)(void); 方法一&#xff1a; HMODULE g_hAPIDLL NULL; wchar_t tcDLLPath[100] L"D:\\name.dll"; g_hAPIDLL ::LoadLibrary(tcDLLPath); if (NULL g_hAPIDLL) { qDebug() << "load library f…

PyTorch框架学习四——计算图与动态图机制

PyTorch框架学习四——计算图与动态图机制一、计算图二、动态图与静态图三、torch.autograd1.torch.autograd.backward()2.torch.autograd.grad()3.autograd小贴士4.代码演示理解&#xff08;1&#xff09;构建计算图并反向求导&#xff1a;&#xff08;2&#xff09;grad_tens…

ipynb文件转为python(.py)文件

在Anaconda中的jupyter打开该ipynb文件&#xff0c;然后依次点击File—>Download as—>python(.py)

美国准备跳过5G直接到6G 用上万颗卫星包裹全球,靠谱吗?

来源&#xff1a;瞭望智库这项2015年提出的计划&#xff0c;规模极其巨大&#xff0c;总计要在2025年前发射近12000颗卫星。有自媒体认为&#xff0c;该计划表示美国将在太空中建立下一代宽带网络&#xff0c;绕过5G&#xff0c;直接升级到6G&#xff0c;并据此认为“6G并不遥远…

8月读书分享-《执行力是训练出来的》

写在最开头的是&#xff0c;没有拿到这本书之前其实我是很期待的&#xff0c;因为我觉得执行力是我所很需要的东西。但是拿到书之后就有一些失望了&#xff0c;因为我发现他的章节实在是太多了&#xff0c;我总觉得如果章节太多会不会其实是作者的归纳整理能力不太好呢&#xf…

PyTorch框架学习五——图像预处理transforms(一)

PyTorch框架学习五——图像预处理transforms&#xff08;一&#xff09;一、transforms运行机制二、transforms的具体方法1.裁剪&#xff08;1&#xff09;随机裁剪&#xff1a;transforms.RandomCrop()&#xff08;2&#xff09;中心裁剪&#xff1a;transforms.CenterCrop()&…

机器之心 GitHub 项目地址:

机器之心 GitHub 项目地址&#xff1a;https://github.com/jiqizhixin/ML-Tutorial-Experiment