[Lydsy1805月赛] 对称数

 

    挺不错的一道数据结构题QWQ。

    一开始发现这个题如果不看数据范围的话,妥妥的树上莫队啊23333,然鹅10组数据是不可能让你舒舒服服的树上莫队卡过的23333

    于是想了想,这个题的模型就是,把u到v链上的权值出现奇偶次的01串搞出来,然后第一个0的位置就是所求。。。。。

    但是这个01串并不是很好搞,因为每一位都得异或啊。。。。这样复杂度就要乘上一个 200000/32了(bitset压位),还不如树上莫队呢QWQ

 

    不过有一种套路,叫做hash异或,我们就给每一个权值随机一个unsined long long范围的hash值,大概率保证询问涉及的子集的异或和不为0(这个主要看人品了。。。因为总的来说肯定会有很多子集的异或和为0,但是因为子集总数太过庞大,询问涉及的只是小部分,所以出错概率还是很小的2333)

 

    这样,如果一个区间所有数都出现奇数次,那么区间的hash异或起来就和 路径权值线段树在这个区间异或起来的值一样了,直接在主席树上二分即可。。。

    (注意lca是要被算上的,但是如果直接用到根前缀的两个主席树异或的话lca是会被消去的)

 

#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
const int maxn=200005;
#define mid (l+r>>1)
int T,n,a[maxn],m,to[maxn*2],ne[maxn*2],dep[maxn],le,w,A,B,ans;
int hd[maxn],num,siz[maxn],son[maxn],cl[maxn],f[maxn],ri,lca;
inline void add(int x,int y){ to[++num]=y,ne[num]=hd[x],hd[x]=num;}
ll val[maxn],Xor[maxn],now;
struct node{ll sum;node *lc,*rc;
}nil[maxn*37],*rot[maxn],*cnt;inline void init(){nil->sum=0;nil->lc=nil->rc=rot[0]=cnt=nil;fill(hd+1,hd+n+1,0),num=0;memset(son,0,sizeof(son));
}node *update(node *u,int l,int r){node *ret=++cnt;*ret=*u,ret->sum^=val[le];if(l==r) return ret;if(le<=mid) ret->lc=update(ret->lc,l,mid);else ret->rc=update(ret->rc,mid+1,r);return ret;
}void query(node *u,int l,int r){if(l>=le&&r<=ri){ now^=u->sum; return;}if(le<=mid) query(u->lc,l,mid);if(ri>mid) query(u->rc,mid+1,r);
}void Fdfs(int x,int fa){f[x]=fa,siz[x]=1,dep[x]=dep[fa]+1;le=a[x],rot[x]=update(rot[fa],1,200001);for(int i=hd[x];i;i=ne[i]) if(to[i]!=fa){Fdfs(to[i],x),siz[x]+=siz[to[i]];if(!son[x]||siz[to[i]]>siz[son[x]]) son[x]=to[i];}
}void Sdfs(int x,int tp){cl[x]=tp;if(!son[x]) return;Sdfs(son[x],tp);for(int i=hd[x];i;i=ne[i]) if(to[i]!=f[x]&&to[i]!=son[x]) Sdfs(to[i],to[i]);
}int LCA(int x,int y){while(cl[x]!=cl[y]){if(dep[cl[x]]>dep[cl[y]]) x=f[cl[x]];else y=f[cl[y]];}return dep[x]<dep[y]?x:y;
}void query(node *u,node *v,int l,int r){if(l==r){ ans=l; return;}if((u->lc->sum^v->lc->sum^((a[lca]>=l&&a[lca]<=mid)?val[a[lca]]:0))==(Xor[mid]^Xor[l-1])) query(u->rc,v->rc,mid+1,r);else query(u->lc,v->lc,l,mid);
}inline void solve(){Fdfs(1,0),Sdfs(1,1);while(m--){scanf("%d%d",&A,&B),lca=LCA(A,B);query(rot[A],rot[B],1,200001);printf("%d\n",ans);}
}int main(){
//	freopen("data.in","r",stdin);
//	freopen("data.out","w",stdout);val[1]=1;for(int i=2;i<=200001;i++) val[i]=val[i-1]*233ll;for(int i=1;i<=200001;i++) Xor[i]=val[i]^Xor[i-1];scanf("%d",&T);while(T--){init(),scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",a+i);int uu,vv;for(int i=1;i<n;i++) scanf("%d%d",&uu,&vv),add(uu,vv),add(vv,uu);solve();}return 0;
}

 

转载于:https://www.cnblogs.com/JYYHH/p/9099254.html

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

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

相关文章

linux下被遗忘的gpio_keys按键驱动

我们新项目硬件设计上使用gpio口做按键&#xff0c;所以我就需要搞定这个驱动&#xff0c;本来想自己写一个gpio口的按键驱动&#xff0c;然后看了下内核下面的代码&#xff0c;已经有现成的了。Linux内核下游很多很多的现成驱动&#xff0c;只要你想得到的&#xff0c;基本都是…

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

许多渗透测试人员和攻击者通常都会使用一种被称为“密码喷洒&#xff08;Password Spraying&#xff09;”的技术来进行测试和攻击。对密码进行喷洒式的攻击&#xff0c;这个叫法很形象&#xff0c;因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码猜测通常是为了避…

单片机编程技巧—状态机编程

摘要&#xff1a;不知道大家有没有这样一种感觉&#xff0c;就是感觉自己玩单片机还可以&#xff0c;各个功能模块也都会驱动&#xff0c;但是如果让你完整的写一套代码&#xff0c;却无逻辑与框架可言&#xff0c;上来就是开始写&#xff01;东抄抄写抄抄。说明编程还处于比较…

啥叫旁路电容?啥叫去耦?可以不再争论了吗

1. 旁路和去耦先谈两个比较重要的概念&#xff1a;旁路电容(Bypass Capacitor)&#xff0c;去耦电容(Decoupling Capacitor)。只要是设计过硬件电路的同学肯定对这两个词不陌生&#xff0c;但真正理解这两个概念的可能并不多。我刚毕业时就问过我的师傅&#xff0c;为什么总是在…

H5活动产品设计指南基础版

本文来自 网易云社区 。 H5一般页面不会很多&#xff0c;看似简单&#xff0c;实际上会有很多细节需要注意&#xff0c;我自己在做过了几个H5之后&#xff0c;发现了一些常犯的问题&#xff0c;做了小结&#xff0c;希望给新开始做H5的产品相关的同学提供一些帮助。 首先说说一…

图解丨在嵌入式设备上实现HTTP服务器

您好呀&#xff0c;我是小二。本期为大家带来一个 WiFi 应用的实际场景&#xff0c;其实在之前「我对 WiFi 驱动移植过程&#xff0c;做了一次总结复盘」这篇文章中有简单提过&#xff0c;但由于内容较多&#xff0c;就单独摘出来了。来自读者的催更????????????&a…

maven详解之仓库

在Maven中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称之为构件。 Maven在某个统一的位置存储所有项目的共享的构件&#xff0c;这个统一的位置&#xff0c;我们就称之为仓库。&#xff08;仓库就是存放依赖和插件的地方&#xff09; 任何的构件都有…

Linux内核代码,第一次看到这样使用的宏

晚上看内核代码&#xff0c;看到一个有意思的宏&#xff0c;我之前没有见到过&#xff0c;当然&#xff0c;肯定有人见到过&#xff0c;我写出来是给那些没有看到过的人看的。我说是深夜&#xff0c;那就肯定是深夜代码是从内核里面看到的我们正常使用宏是这样的C语言、嵌入式中…

flex柱状图和折线图的混合图使用

<?xml version"1.0"?> <mx:Application xmlns:mx"http://www.adobe.com/2006/mxml"> <mx:Script> <!--[CDATA[ import mx.collections.ArrayCollection; [Bindable] public var data1:ArrayCollectionnew ArrayCollection([{date:&…

给高通提个问题解决为啥那么久?

我第一次接触高通芯片是在中兴那&#xff0c;我们用的是一款很老的芯片&#xff0c;高通的文档非常多&#xff0c;资料非常丰富&#xff0c;如果有问题的话我一般都会从文档里面找答案。但是&#xff0c;但是&#xff0c;并不是所有的问题都是能自己搞定&#xff0c;比如遇到一…

新公司上班第一天

大家好&#xff0c;文章转自我的朋友helloworld&#xff0c;文中的我并不是我&#xff0c;感谢大家阅读&#xff0c;转载&#xff0c;在看。Hello 各位小伙伴&#xff0c;周一愉快~今天是我到新公司上班的第一天&#xff0c;入职新公司&#xff0c;就好像刚刚谈恋爱一样&#x…

[CTO札记]从Cloud Computing看战略决策:想做、能做与可做 -

1&#xff09;想做--未来方向很多人已经意识到&#xff0c;Cloud Computing未来将是基础设施&#xff0c;扮演水、电、气的角色。可以说&#xff0c;Cloud Computing是很多互联网、电信大公司想做的事。因为&#xff1a;》不仅重要&#xff08;大公司都不想自己的命运掌握在别人…

JAVA基础学习之路(三)类定义及构造方法

类的定义及使用 一&#xff0c;类的定义 class Book {//定义一个类int price;//定义一个属性int num;public static int getMonney(int price, int num) {//定义一个方法return price*num;} }public class test2 {public static void main(String args[]) {Book monney new B…

电子火折子的电路原理

d▲本文要分析的电路看古装剧时&#xff0c;不时可以看到这样的场景&#xff1a;有人从怀里掏出一个“火折子”&#xff0c;对着吹一吹就点着了火&#xff0c;觉得很神奇&#xff1a;更加神奇的是&#xff0c;有才的电子工程师们&#xff0c;重新发明了火折子&#xff0c;也就是…

如何快速构建嵌入式全栈知识体系?

嵌入式是一门交叉学科。一个嵌入式电子产品&#xff08;比如手机&#xff09;从底层到上层&#xff0c;一般会涉及半导体芯片、电子电路、计算机、操作系统、多媒体等不同专业领域的知识。很多从事嵌入式开发的朋友&#xff0c;通常来自不同的专业&#xff08;电子、电气、计算…

台湾高僧称游戏中杀人是罪业死后要下地狱

台湾著名高僧净空法师的一段谈因果报应的视频&#xff0c;近来被上传到网络上&#xff0c;引发网友特别是游戏玩家的极大反应。净空法师在这段视频中说&#xff0c;在电子游戏中杀人所造下 的罪业和杀真人是相同的&#xff0c;死后肯定会下阿鼻地狱&#xff0c;出来后也还要慢慢…

嵌入式系统开发者需要掌握什么技术?

大家好&#xff0c;我是小嵌&#xff0c;在知乎上看到这个问题&#xff0c;其中有一个答主的答案很经典&#xff0c;特此分享给大家。说实话&#xff0c;问题中嵌入式开发这个话题有点庞大&#xff0c;毕竟它涵盖的领域和范围很宽泛。作为一个在嵌入式软件开发方面工作了十多年…

做决定要趁早

之前接触的一个读者朋友&#xff0c;几个月前跟我咨询了问题&#xff0c;那时候因为有个决定困扰他&#xff0c;已经快抑郁了&#xff0c;不过到现在为止&#xff0c;还没有做决定。做决定这个事情&#xff0c;我希望不要拖太久&#xff0c;不要咨询太多无关的人&#xff0c;做…

2009第二届C++技术大会即将在上海隆重召开

2009第二届C技术大会即将在上海隆重召开 作为软件开发语言的翘楚&#xff0c;C对于现代软件的发展功不可没&#xff0c;特别是在系统软件开发领域&#xff0c;C扮演着关键的角色。中国作为全球软件产业最具潜力的市场&#xff0c;越来越多的企业认识到了C及相关系统软件技术在软…

大数据开发你需要知道的十个技术

前言 “当你不创造东西时&#xff0c;你只会根据自己的感觉而不是能力去看待问题。” – WhyTheLuckyStiff 汇总一些自己在大数据路上走过的弯路&#xff0c;愿大家不再掉坑… 1.分布式存储 传统化集中式存储存在已有一段时间。但大数据并非真的适合集中式存储架构。Hadoop设计…