2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor [LCA+分块]

2017ICPC西安现场赛 XOR(线段树合并线性基) 题目链接:https://nanti.jisuanke.com/t/A1607 题目大意 :给你长度为n的序列,以及一个数k,有q次询问,每一次询问给你一个区间[L,R],然后你可以在区间内取任意多个数(每个数只能去一次),异或这些数得到一个值val,使得k|val的最值大,输出这个最大值 分析:或(|)操作,我们知道对应二进制为只要有一个1,结果就为1,所以我们让k|val最大,必须把k的高位0尽可能变为1,那么我们对k的二进制位取反得到一个数x,也变成了我们尽可能保留x的高位1,所以我们把原序列的所有数 阅读详情

题意:给你一棵树,树上每个点有一个值,q个询问,每个询问求u到v的路径上,下标为0,k,2*k···的点的异或和为多少。

题解:分块的思想,我们对于每个点,记录他往上跳len步到root的异或和,对于询问假如k大于len,我们一步一步跳,假如小于len,我们直接用记录的数据计算出答案。

这题细节很多= =。

AC代码:

#include<stdio.h> 
#include<vector>  
#include<math.h>  
#include<string.h>  
#define N 50005  
using namespace std;  
vector<int>vt[N];  
int deep[N],p[N][20],n,m,len;  
int a[N],sum[N][255];  
void dfs(int u,int fa)   
{   
    int now=u,step=0;  
    deep[u]=deep[fa]+1;  
    p[u][0]=fa;  
    while(step<255)  
    {  
        sum[u][step]=a[u]^sum[now][step];  
        now=p[now][0];  
        step++;  
    }    
    for(int i=0;i<vt[u].size();i++) {     
        int to=vt[u][i];  
        if(to==fa)continue;  
        dfs(to,u);  
    }     
}    
void init() {     
    int i,j; //p[i][j]表示i结点的第2^j祖先    
    for(j=1;(1<<j)<=n;j++)     
        for(i=1;i<=n;i++)     
            if(p[i][j-1]!=-1) p[i][j]=p[p[i][j-1]][j-1];    
          //i的第2^j祖先就是i的第2^(j-1)祖先的第2^(j-1)祖先     
}    
int lca(int a,int b) {//最近公共祖先     
    int i,j;     
    if(deep[a]<deep[b])swap(a,b);     
    for(i=0;(1<<i)<=deep[a];i++); i--;     
    for(j=i;j>=0;j--) //使a,b两点的深度相同     
        if(deep[a]-(1<<j)>=deep[b]) a=p[a][j];     
    if(a==b)return a;     
    for(j=i;j>=0;j--) {     
        if(p[a][j]!=-1&&p[a][j]!=p[b][j]) {     
            a=p[a][j]; b=p[b][j];     
        }    
    }     
    return p[a][0];     
}    
int getk(int now,int x)  
{  
    for(int i=19;i>=0;--i)  
        if(x>=(1<<i))  
        {  
            now=p[now][i];  
            x-=(1<<i);  
            if(now==0)break;  
        }  
    return now;  
}  
int main()  
{  
    while(~scanf("%d%d",&n,&m))  
    {  
        memset(sum,0,sizeof(sum));  
        for(int i=0;i<50005;i++)vt[i].clear();  
        len=(int)sqrt(n);deep[1]=1;  
        for(int i=0;i<n-1;i++)  
        {  
            int u,v;  
            scanf("%d%d",&u,&v);  
            vt[u].push_back(v);  
            vt[v].push_back(u);  
        }  
        for(int i=1;i<=n;i++)  
            scanf("%d",&a[i]);  
        dfs(1,0);  
        init();  
        while(m--)  
        {  
            int u,v,k;  
            scanf("%d%d%d",&u,&v,&k);  
            int lc=lca(u,v);  
            int numu=deep[u]-deep[lc];  
            int numv=deep[v]-deep[lc];  
            int ans;  
            if(k<=len)  
            {  
                ans=sum[u][k];  
                int s1=(numu)%k;  
                numu=k-s1;  
                int now=lc;  
                now=getk(now,numu);  
                ans^=sum[now][k];  
                int need=numv-numu;  
                if(need>=0&&v!=lc)  
                {  
                    need%=k;  
                    v=getk(v,need);  
                    ans^=sum[v][k];  
                    s1=(numv-need)%k;  
                    numv=(k-s1)%k;  
                    now=lc;  
                    now=getk(now,numv);  
                    ans^=sum[now][k];  
                }  
            }  
            else   
            {  
                int now=u;ans=0;  
                while(deep[now]>=deep[lc])  
                {  
                    ans^=a[now];  
                    now=getk(now,k);  
                }  
                int s1=(numu)%k;  
                numu=k-s1;  
                int need=numv-numu;  
                if(need>=0&&v!=lc)  
                {  
                    now=v;  
                    need%=k;  
                    now=getk(now,need);  
                    while(deep[now]>deep[lc])  
                    {  
                        ans^=a[now];  
                        now=getk(now,k);  
                    }  
                }  
            }  
            printf("%d\n",ans);  
        }  
    }  
}  


GIS坐标系转换以及空间校正和地理配准 许多小伙伴都对坐标系,投影这类问题迷迷糊糊,我之前也一样,现在总结一下。 坐标系的转换1.为什么要进行坐标系的转换?2. 不同坐标系的介绍1.地理坐标系我国常见的地理坐标(1).北京54坐标系(2).西安80坐标系(3).WGS-84坐标系(4).大地2000坐标系2.投影坐标系我国常用的投影坐标系(1) UTM投影(2) 高斯-克吕格投影(3) 兰伯特投影(4) 阿尔伯斯投影投影坐标系的选择3. 坐标系的转换1.已知坐标系之间的转换1.1 两坐标系的参考椭球相同1.2 两坐标系的参考椭球不一致,但是GIS 阅读详情

相关推荐

ClickHouse的bitmap使用

ClickHouse的bitmap使用 bitmap的基本使用 在CK中bitmap有两种构建方式,在ClickHouse的官网有说明: (1)一个是由聚合函数groupBitmapState构造的, (2)另一个是由Array Object构造的。同时还可以将位图对象转化为数组对象。 bitmap实战 数据和基本数据表准备 创建一张基本表,一个用户表,有多个描述的维度,每个维度由该维度的唯一id。 CREATE TABLE test02(id UInt16, tag1 UInt8, tag2 UInt8,

zg_hover的专栏 5654

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor(LCA+K级父亲暴力卡过)

题目链接:2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor 题意: 给你一棵有n个节点的树,然后有Q个询问,每次询问给出两个点x,y,k。将x->y路径上经过的点放进一个数组a里,将询问[0],a[k],a[2*k],a[m*k]的值异或起来的值为多少。 题解: 预处理lca和k=1的答案,k>1的用倍增暴力往上跳,然后就完了,不过有点慢,需要加个读入挂才...

weixin_30872867的博客 173

STM32接入CH340芯片的升级电路及初始化进入升级模式(死机)问题处理

MCU-REST 在 MCU-BOOT0 处于低电平状态下,进行下拉操作,在MCU-REST 与 MCU-BOOT0 恢复正常电平时,将导致MCU死机,MCU-REST 先于 MCU-BOOT0 下拉可解决该问题;MCU-REST 在 上升沿结束时将判断 MCU-BOOT0 的状态,MCU-BOOT0 处于高电平,MCU死机,MCU-BOOT0 处于低电平 MCU 正常;

LuDvei的博客 2491

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G Xor lca+暴力

题目链接:https://nanti.jisuanke.com/t/17120 题意:给你一棵树,每个点都有权值,q次询问,每次询问给你a,b,k,问从点a到点b每隔k步的异或和是多少。 思路:现场没敢打,复杂度怎么算都不对。。。后来别人说可以1的情况lca其他暴力,我就试了一下,一开始是TLE,然后我各种迷之优化确实可以过。。。。走k步这里我是用了倍增的数组然后用logk的复杂度走k步。。。

overload1997 1164

幸狐RV1106开发板运行Yolo8示例

rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,目前对 Luckfox Pico 所使用的 RV1103/RV1106 有限支持,最新的示例支持 mobilenet 模型部署和 yolo 模型部署,本章以部署 yolov8修改版本为例介绍 rknn_model_zoo 示例的使用。:可选项,用于指定 RKNN 模型的保存路径,默认保存在 ONNX 模型同一目录下,名称为 ‘yolov8.rknn’例如“rv1106”。

qq_42730522的博客 3224

Codesys电子凸轮从入门到应用:手把手教你用MC_CamIn/MC_CamOut实现主从轴同步

本文详细介绍了如何在Codesys平台上使用MC_CamIn和MC_CamOut功能块实现电子凸轮的主从轴同步控制。从环境配置、轴使能到凸轮表创建与动态切换,提供了完整的程序编写指南和调试技巧,帮助工程师快速掌握工业自动化中的高精度运动控制技术。

weixin_26878995的博客 277

BZOJ 4017&&2017 icpc 西安G 区间异或和

传送门 第一个问题,一堆0和1,求所有区间的异或的和 第二个问题,一堆0和1,求所有区间的和的异或 令xor(i)表示前i项的异或值,xor(l,r)表示第l项到第r项的异或值,那么xor(l,r)=xor(r)⊕xor(l−1)。  考虑xor(l,r)的二进制第k位是1的可能情况,当且仅当xor(r)和xor(l−1)的二进制第k位不同。  那么我们可以固

twh233的算法blog 635

CS算法实战:用MATLAB从零实现SAR点目标成像(附完整代码)

本文详细介绍了如何使用MATLAB从零实现SAR点目标CS成像算法,涵盖Chirp Scaling(CS)算法的核心理论、距离徙动校正(RCMC)和方位压缩等关键步骤。通过完整的代码示例和实战技巧,帮助读者掌握SAR成像处理算法,提升遥感图像处理能力。

weixin_29211309的博客 179

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Xor

原题链接:https://nanti.jisuanke.com/t/17120 题目大意:给出一颗n个点的带点权的树,问从a到b的最短路径上第k*p个点的异或和是多少。(n) 先吐槽一下,可能我是中了一种叫做赛后1min过题的诅咒QAQ。 这题的大概思路是,先用树链剖分预处理一下,再在求lca 的时候求异或和。对于k小于200的点,可以有足够的时间和空间来预处理以k为间距的前缀异或和,k大于

ACM交流帖 1060

PX4从放弃到精通(二十二):日志

文章目录前言一、下载日志二、ulog转CSV三、利用flightplot软件分析PX4的ulog日志1 windos安装2 ubuntu18.04安装四、使用PlotJuggler分析PX4日志五、设置日志记录条件六、添加自定义日志消息 前言 PX4 1.10以上固件 QGC 一、下载日志 将飞控链接地面站,在下图页面点击“刷新”,即可看到保存的日志(前提是要有TF卡) 选择需要下载的日志,点击右侧的“下载”,然后选择目录即可进行下载,如果想擦除所有的日志,可以点击右侧的“擦除全部” 二、ulog转CS

超维空间科技的博客 6796

Hadoop在大数据领域的电商数据分析案例

随着电商行业的迅猛发展,每天都会产生海量的数据,如用户浏览记录、购买行为、商品信息等。如何从这些数据中提取有价值的信息,为电商企业的决策提供支持,成为了电商企业面临的重要问题。Hadoop作为一个开源的分布式计算平台,具有高可靠性、高扩展性和高效性等特点,能够很好地处理大数据。本文的目的就是通过实际案例,详细介绍Hadoop在电商数据分析中的应用,范围涵盖了从数据采集、存储到分析的整个流程。本文首先介绍背景信息,让读者了解Hadoop在电商数据分析中的重要性和应用场景。

Java大师兄的博客 1178

2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor

There is a tree with nn nodes. For each node, there is an integer value a_ia​i​​, (1 \le a_i \le 1,000,000,0001≤a​i​​≤1,000,000,000 for 1 \le i \le n1≤i≤n). There is qq queries which are d

山科小菜鸡 609

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【分块】计蒜客17120 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor

题意:给一棵树,每个点有权值。q次询问a,b,k,问你从a点到b点,每次跳距离k,权值的异或和? 预处理每个点往其根节点的路径上隔1~sqrt(n)的距离的异或和,然后把询问拆成a->lca(a,b),lca(a,b)->b,讨论一下即可,细节比较多。 队友的代码: #include <cmath> #include <cstdio> #inclu...

weixin_34111790的博客 168

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

2017 ACM西安网络赛 G题 Xor

题意: 给出一棵树,每个节点有个val,q个询问。 询问格式:u, v, k, 从u到v的路径, 每个k个点取一个,求所有点的val值异或和。 如果没有隔k个取1个的限制的话,那么做法是很显然的,dfs一遍,求出所有点到根的异或和,ans=xor(u, root)^xor(v, root)^(lca(u, v),root)。 现在有步长的限制,取m=sqrt(n), 1)预处理出步长k<=

Infinity的博客 766

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

2017多校第3场 HDU 6065 RXD, tree and sequence LCA,DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6065 题意:给一颗有根树,根节点为1,再给定一个排列,长度为n,要求将排列切分成K段,定义每段的价值为该排列所有点及两两点之间lca中最浅节点的深度。要求输出K段区间所有可能的价值和中的最小值。n*K 解法:参考http://blog.csdn.net/u013944294/article/d

I good vegetable a! 603

CTSC 2017

开始的开始,我们坐着飞机来到了帝都。

QWsin的博客 5523

2017 ACM-ICPC西安现场赛 J题LOL(暴力)

题意:输入五个长度为100的01串,从每个串中选择一个是1的位置,任意两个串中选择的位置不能相同,一共有多少种情况,答案乘以常数531192758再对1e9+7取模。 如果对五个串都dfs复杂度是10^10稳T,所以对前四个串dfs,最后一个串的贡献直接加到最终的答案上。dfs的参数分别是第x个串和第五个串中是1的位置有sum个还没有被选择。 代码如下 #include #incl

可以说非常弱鸡 2151

KD Tree 新知选作(BZOJ 2850)

什么是KDrree一些优质入门文章在这里附上两篇笔者学习kdtree的思路和详细实现思想的优质文章:思路篇传送门 详细篇传送门同时鸣谢为笔者耐心讲解kdtree的神犇:mima_reincarnation笔者对KDtree的理解应用 在去年的ACM/ICPC的青岛赛区,有一道金牌题就是KDtree题,但在此之前某人曾立下flag“应该不会考的吧,但是考了就GG”。主要用于解决kNN问题,平面上距离

yashem66 1403

西安网络赛 xor

There is a tree with nn nodes. For each node, there is an integer value a_ia​i​​, (1 \le a_i \le 1,000,000,0001≤a​i​​≤1,000,000,000 for 1 \le i \le n1≤i≤n). There is qq queries which are d

Hallelujah520的博客 426

HDU 5992 && 2016青岛ICPC: K. Finding Hotels(KD树)

  Finding Hotels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Total Submission(s): 1755    Accepted Submission(s): 546 Problem Description There are N hote...

加载中... 825

ACM-ICPC 2017 西安赛区现场赛 A. XOR(线段树 + 线性基合并)

题目链接:https://nanti.jisuanke.com/t/A1607 题目大意:初始有一个序列a,有q个询问,每次询问 k | [l,r] 区间内子集异或的值的最大值是多少。 题解:因为是k | [l,r]的子集异或运算,k为1的位可以不用考虑,只需要考虑k为0的位异或最大是几,做法是线段树套线性基,因为线性基也具有区间可加性,两个区间的线性基直接暴力合并。 (线性基的合并可行性是比较显...

qq_41997978的博客 704

ZOJ - 4066(2018 ICPC青岛现场赛 I)

题目链接:https://vjudge.net/problem/ZOJ-4066   解题思路:"枚举最小值+线段树维护可行解最大值最小化" 我们可以把所有可选区间化成n个长度为1的区间,和n-1个长度为2的区间。 将这2*n-1个数从大到小排序,枚举最小值,然后线段树查询更新区间最小值(因为最大到小插入所以之前的肯定大于现在的值) 每个区间维护这么一个东西; struct node...

过路人丶的博客 749

2017年icpc西安区域赛G题

题意:就是给你一些区间,每次有q个询问,每次询问一个区间的所有子区间的抑或和,数据范围都是100000。 思路:首先求一下抑或和前缀,然后你会发现对于一个区间的最后结果就是区间选两个位置的数抑或在一起,考虑拆位,抑或就是这一为的数字不同的时候贡献为1,然后对于每一位对该区间的贡献就是这一位在该区间0的个数和1的个数乘在一起,当然还要考虑比l-1这个数字,这样保证边界是可以取到的,我首先想的思路是...

dongdongdong122的博客 640

2017 ACM-ICPC 西安站

本队人员配置: 解题核心,以下简称王A 主代码手,以下简称王B 队长,以下简称我开局,王A和王B负责签到,我把全部题读一遍(并没有什么用) 然后王A发现了一道题,排个序就好了。然后王A指导王B写,然后1A. 7分钟。王A又发现了一道题,结论是A / (A + B),当然了,一般人肯定不能一眼看出来了。不过作为签到题金牌选手的王A当然就看出来了。26分钟,1A。王A双发现一道题,贪心+线段树。

more time 1250
上一篇: HDU 6200 mustedge mustedge mustedge [LCT+缩点]
下一篇: HDU 6215 Brute Force Sorting [链表]
ACTerminate
博客等级 码龄10年 63粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值