[cf1479D]Odd Mineral Resource
先考虑判定是否有解,注意到无解即每一个数都出现偶数次,根据异或的性质,只需要随机$V_{i}$,假设$u$到$v$路径上所有节点构成集合$S$,若$\bigoplus_{x\in S,l\le a_{x}\le r}V_{a_{x}}=0$即无解
考虑如何快速计算上述值,根据异或的自反性,对其差分,也即统计一个节点到根路径上的权值异或,建立线段树,并在其父亲的基础上可持久化即可
更进一步的,在这个线段树上二分即可得到答案(即先判定每一段是否为0,再在其中二分)
时间复杂度为$o(n\log n)$,即可通过
下面来分析概率,假设$V_{i}$的随机范围为$[0,V)$(其中$V$为2的幂次),考虑答案错误的概率——
考虑一次询问中,求得异或为0但实际存在出现奇数次权值的概率,即$\frac{1}{V}$
总共询问$o(q\log n)$次,可以估计概率为$\frac{q\log n}{V}$,当$V\sim 2^{64}$即足够高
(另外注意随机时,如果是选择若干个数相乘,需要判定最终结果不为0)
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 300005
4 #define ull unsigned long long
5 #define mid (l+r>>1)
6 struct Edge{
7 int nex,to;
8 }edge[N<<1];
9 int V,E,n,q,x,y,l,r,z,zz,head[N],dep[N],rt[N],a[N],f[N][21],ls[N*20],rs[N*20];
10 ull R[N],sum[N*20];
11 int New(int k){
12 sum[++V]=sum[k];
13 ls[V]=ls[k];
14 rs[V]=rs[k];
15 return V;
16 }
17 void add(int x,int y){
18 edge[E].nex=head[x];
19 edge[E].to=y;
20 head[x]=E++;
21 }
22 int lca(int x,int y){
23 if (dep[x]<dep[y])swap(x,y);
24 for(int i=20;i>=0;i--)
25 if (dep[f[x][i]]>=dep[y])x=f[x][i];
26 if (x==y)return x;
27 for(int i=20;i>=0;i--)
28 if (f[x][i]!=f[y][i]){
29 x=f[x][i];
30 y=f[y][i];
31 }
32 return f[x][0];
33 }
34 void update(int &k,int l,int r,int x,ull y){
35 k=New(k);
36 sum[k]^=y;
37 if (l==r)return;
38 if (x<=mid)update(ls[k],l,mid,x,y);
39 else update(rs[k],mid+1,r,x,y);
40 }
41 int query(int k1,int k2,int k3,int k4,int l,int r,int x,int y){
42 if ((l>y)||(x>r))return -1;
43 if ((x<=l)&&(r<=y)){
44 if (!(sum[k1]^sum[k2]^sum[k3]^sum[k4]))return -1;
45 }
46 if (l==r)return l;
47 int ans=query(ls[k1],ls[k2],ls[k3],ls[k4],l,mid,x,y);
48 if (ans>=0)return ans;
49 return query(rs[k1],rs[k2],rs[k3],rs[k4],mid+1,r,x,y);
50 }
51 void dfs(int k,int fa,int s){
52 dep[k]=s;
53 f[k][0]=fa;
54 for(int i=1;i<=20;i++)f[k][i]=f[f[k][i-1]][i-1];
55 rt[k]=rt[fa];
56 update(rt[k],1,n,a[k],R[a[k]]);
57 for(int i=head[k];i!=-1;i=edge[i].nex)
58 if (edge[i].to!=fa)dfs(edge[i].to,k,s+1);
59 }
60 int main(){
61 srand(time(0));
62 scanf("%d%d",&n,&q);
63 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
64 for(int i=1;i<=n;i++)
65 while (!R[i])R[i]=(ull)rand()*(ull)rand()*(ull)rand()*(ull)rand()*(ull)rand();
66 memset(head,-1,sizeof(head));
67 for(int i=1;i<n;i++){
68 scanf("%d%d",&x,&y);
69 add(x,y);
70 add(y,x);
71 }
72 dfs(1,0,1);
73 for(int i=1;i<=q;i++){
74 scanf("%d%d%d%d",&x,&y,&l,&r);
75 z=lca(x,y),zz=f[z][0];
76 printf("%d\n",query(rt[x],rt[y],rt[z],rt[zz],1,n,l,r));
77 }
78 }
[cf1479D]Odd Mineral Resource的更多相关文章
- CF1479X Codeforces Round #700
C Continuous City(图的构造) 题目大意:让你构造一个n\le 32的有向无环无重边图,使得从1走到n的所有路径长度在L,R之间,且每种长度的路径只有唯一一条,$L,R\le 1e6$ ...
- C++ Core Guidelines
C++ Core Guidelines September 9, 2015 Editors: Bjarne Stroustrup Herb Sutter This document is a very ...
- Spring resource bundle多语言,单引号format异常
Spring resource bundle多语言,单引号format异常 前言 十一假期被通知出现大bug,然后发现是多语言翻译问题.法语中有很多单引号,单引号在format的时候出现无法匹配问题. ...
- Spring5:@Autowired注解、@Resource注解和@Service注解
什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分 ...
- 【初探Spring】------Spring IOC(三):初始化过程---Resource定位
我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...
- 2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- 【解决方案】 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userHandler': Injection of resource dependencies failed;
一个错误会浪费好多青春绳命 鉴于此,为了不让大家也走弯路,分享解决方案. [错误代码提示] StandardWrapper.Throwableorg.springframework.beans.fac ...
- AngularJS Resource:与 RESTful API 交互
REST(表征性状态传输,Representational State Transfer)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格.RESTful风格的设计不仅 ...
- 运行nltk示例 Resource u'tokenizers punkt english.pickle' not found解决
nltk安装完毕后,编写如下示例程序并运行,报Resource u'tokenizers/punkt/english.pickle' not found错误 import nltk sentence ...
随机推荐
- 我在阿里巴巴做 Serverless 云开发平台
技术的成熟度源自大规模的实践,Java 领域,阿里将自身的实践源源不断的反哺给微服务技术体系:Node.js 领域,阿里正掀起了前所未有的前端革命浪潮,将实践反哺给 Serverless技术体系,并逐 ...
- hdu3507 斜率优化学习笔记(斜率优化+dp)
QWQ菜的真实. 首先来看这个题. 很显然能得到一个朴素的\(dp\)柿子 \[dp[i]=max(dp[i],dp[j]+(sum[i]-sum[j])^2) \] 但是因为\(n\le 50000 ...
- 安装早期老版本 Visual Studio
安装早期老版本 Visual Studio https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
- Golang通脉之数组
数组是同一种数据类型元素的集合.数组在内存中都是连续存放的. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为int的数组 ...
- SpringCloud微服务实战——搭建企业级开发框架(六):使用knife4j集成Swagger2接口文档
knife4j是为集成Swagger生成api文档的增强解决方案,前后端Java代码以及前端Ui模块进行分离,在微服务架构下使用更加灵活, 提供专注于Swagger的增强解决方案,不同于只是改善增强前 ...
- 5.27日Scrum Metting
日期:2021年5月27日 会议主要内容概述:确定账单数据格式,确定需要添加新的图表,确定模板分享功能任务量. 一.进度情况# 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 ...
- linux centos7 修改默认网卡命名规则为eth0脚本
CentOS6之前基于传统的命名方式如:eth1,eth0.... Centos7提供了不同的命名规则,默认是基于固件.拓扑.位置信息来分配.这样做的优点是命名是全自动的.可预知的,缺点是比eth0. ...
- NGINX杂谈——flask_limiter的IP获取(怎么拿到真实的客户端IP)
本篇博客将 flask_limiter 作为切入点,来记录一下自己对 remote_addr 和 proxy_add_x_forwarded_for 两个变量.X-Real-IP 和 X-Forwar ...
- NOIP模拟85(多校18)
前言 好像每个题目背景所描述的人都是某部番里的角色,热切好像都挺惨的(情感上的惨). 然后我只知道 T1 的莓,确实挺惨... T1 莓良心 解题思路 首先答案只与 \(w\) 的和有关系,于是问题就 ...
- 《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何自动化测试,这一篇宏哥在网上找了一个问卷调查,给小伙伴或童鞋们来演示一下.上 ...