P3292-[SCOI2016]幸运数字【线性基,LCA,倍增】

正题

题目链接:https://www.luogu.com.cn/problem/P3292


题目大意

nnn个点的一棵树,每个点都点权。每次询问一条路径,选择若干个点的异或和最大。


解题思路

路径上的如何进行计算,我们知道我们可以用倍增来计算权值和。我们可以把每个线性基视为边权,然后加和就是线性基的合并。

合并线性基时我们将后面的所有did_idi都插入到前面那个线性基中即可。

时间复杂度O((n+q)log3n)O((n+q)log^3 n)O((n+q)log3n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=21000,T=15;
struct node{ll to,next;
}a[N*2];
struct xxj{ll d[80];ll solve(){ll ans=0;for(ll i=60;i>=0;i--)if((ans^d[i])>ans)ans^=d[i];return ans;}void add(ll x){if(!x)return;for(ll i=60;i>=0;i--)if((x>>i)&1ll){if(d[i])x^=d[i];else{d[i]=x;return;}}}
}w[N][T];
ll n,q,tot,ls[N],dep[N],g[N],f[N][T];
xxj operator+(const xxj &a,const xxj &b){xxj ans=a;for(ll i=0;i<=60;i++)if(b.d[i])ans.add(b.d[i]);return ans;
}
void addl(ll x,ll y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dfs(ll x){dep[x]=dep[f[x][0]]+1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(y==f[x][0])continue;f[y][0]=x;dfs(y);}return;
}
void ycl(){for(ll i=1;i<=n;i++)w[i][0].add(g[i]);for(ll j=1;j<T;j++){for(ll i=1;i<=n;i++){f[i][j]=f[f[i][j-1]][j-1];w[i][j]=w[i][j-1]+w[f[i][j-1]][j-1];}}return;
}
ll LCA(ll x,ll y){xxj ans;memset(ans.d,0,sizeof(ans.d));if(dep[x]>dep[y])swap(x,y);for(ll i=T-1;i>=0;i--)if(dep[f[y][i]]>=dep[x])ans=ans+w[y][i],y=f[y][i];if(x==y){ans.add(g[x]);return ans.solve();}for(ll i=T-1;i>=0;i--)if(f[x][i]!=f[y][i])ans=ans+w[x][i]+w[y][i],x=f[x][i],y=f[y][i];ans=ans+w[x][0]+w[y][0];ans.add(g[f[x][0]]);return ans.solve();
}
int main()
{scanf("%lld%lld",&n,&q);for(ll i=1;i<=n;i++)scanf("%lld",&g[i]);for(ll i=1;i<n;i++){ll x,y;scanf("%lld%lld",&x,&y);addl(x,y);addl(y,x);}dfs(1);ycl();while(q--){ll x,y;scanf("%lld%lld",&x,&y);printf("%lld\n",LCA(x,y));}
}

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

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

相关文章

EntityFramework Core进行读写分离最佳实践方式,了解一下?

本来打算写ASP.NET Core MVC基础系列内容&#xff0c;博客评论有园友提出讲讲读写分离&#xff0c;这个问题提的好。大多数情况下&#xff0c;对于园友在评论中提出的问题&#xff0c;如果是值得深究或者大多数同行比较关注的问题我都会私下去看看&#xff0c;然后进行对应解答…

P3980 NOI2008志愿者招募

志愿者招募 题目链接 https://www.luogu.org/problemnew/show/P3980 题解 这道题很神奇,这种建图方法很有启发性. 我们平时做的题都点都是是一对一的,而这道题的点的对应关系是一对多(即一个志愿者对应一段连续的区间,也就是多个时间点)的,直接按照传统的网络流建图方法来…

小X的加法难题

小X的加法难题 题目大意&#xff1a; 一个AB的式子&#xff0c;但之间有一些没用的空格&#xff0c;要你求出结果 原题&#xff1a; 解题思路&#xff1a; 字符输入&#xff0c;有数字就存起来&#xff0c;用加号和换行符来分开 代码&#xff1a; #include<cstdio>…

P3857-[TJOI2008]彩灯【线性基】

正题 题目链接:https://www.luogu.com.cn/problem/P3857 题目大意 nnn个彩灯&#xff0c;mmm个开关能使得某些彩灯取反&#xff0c;求有多少种彩灯样式。 解题思路 其实就是mmm个数种若干个数异或起来有多少不同的数。 又是一道考线性基性质的题目&#xff0c;因为线性基中任…

【桶排】小 X 的密码破译

小 X 的密码破译 题目大意&#xff1a; 有一堆式子&#xff0c;去重再排序后&#xff0c;按规则求出结果 原题&#xff1a; 解题思路&#xff1a; 把每一个求出来的数丢到桶里&#xff0c;然后跑一遍就可以了 代码&#xff1a; #include<cstdio> using namespace s…

Uva12325 Zombie's Treasure Chest [二分区间+模拟退火]

Zombie’s Treasure Chest 题目链接 https://cn.vjudge.net/problem/UVA-12325 题意 两种物品无穷多个,第一种物品重量s1s_1s1​,价值v1v_1v1​,第二种物品重量s2s_2s2​,价值v2v_2v2​,背包重nnn,求能装的最大价值之和. 数据全都是2e92e92e9.也就是两种物品的完全背包. 题…

Identity Server 4 预备知识 -- OpenID Connect 简介

我之前的文章简单的介绍了OAuth 2.0 (在这里: 要用Identity Server 4 -- OAuth 2.0 超级简介, 还不是很全.这篇文章我要介绍一下 OpenID Connect.OAuth 2.0 不是身份认证协议OAuth 2.0 不是身份认证(Authentication)协议. 为什么有人会认为OAuth 2.0具有身份认证的功能? 这是因…

P4301-[CQOI2013]新Nim游戏【线性基】

正题 题目链接:https://www.luogu.com.cn/problem/P4301 题目大意 nnn个石头&#xff0c;先手先取走若干堆&#xff08;不能全取&#xff0c;可以不取&#xff09;&#xff0c;后手取走若干堆&#xff08;不能全取&#xff0c;可以不取&#xff09;。然后进行NimNimNim游戏&am…

P2414 NOI2011阿狸的打字机 [AC自动机,dfs序]

阿狸的打字机 题解 题目中给出的字符串就是构建TrieTrieTrie树的顺序.我们将字符串依次读入,每读入一个小写字符就相当于在TrieTrieTrie树当前节点下插入一个小写字符,读入BBB时,就在TrieTrieTrie树中向父节点移动一步.读入PPP的时候,就做一个标记. 然后对这颗TrieTrieTrie树…

Ocelot.JwtAuthorize:一个基于网关的Jwt验证包

Ocelot作为基于.net core的API网关&#xff0c;有一个功能是统一验证&#xff0c;它的作用是把没有访问权限的请求挡在API网关外面&#xff0c;而不是到达API网关事端的API时才去验证&#xff1b;之前我有一篇博文Ocelot统一权限验证&#xff0c;作过说明&#xff0c;这篇博文说…

【并查集】小 X 的液体混合

小 X 的液体混合 题目大意&#xff1a; 在一个玻璃瓶里&#xff0c;放入一些液体&#xff0c;某一对液体放在一起会有反应&#xff0c;当某个液体有反应时危险度就会乘2&#xff08;初值为1&#xff09;&#xff0c;问危险度最大是多少 原题&#xff1a; 解题思路&#xff1…

P4151-[WC2011]最大XOR和路径【线性基】

正题 题目链接:https://www.luogu.com.cn/problem/P4151 题目大意 给一个无向图&#xff0c;求一条1∼n1\sim n1∼n的路径使得异或和最大。 解题思路 很强的思路啊&#xff08;好像去年YPXYPXYPX大爷就讲了反正我也没听懂&#xff09; 我们可以将路径拆分成三部分&#xff…

Swagger如何访问Ocelot中带权限验证的API

先亮源代码&#xff1a;https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDemo这篇博文不是对asp.net core中使用Swagger作介绍&#xff0c;因为社区博客作了详细说明。今天主要说一下Swagger在Ocelot网关权限验证模式下的访问&a…

初一模拟赛总结(2019.4.13)

成绩&#xff1a; rank是有算其他dalaodalaodalao的 注&#xff1a; 这次好像是因为OJ有问题&#xff0c;导致一些AC代码变&#xff08;bei&#xff09;W&#xff08;zhi&#xff09;A&#xff08;cai&#xff09;了 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3…

etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能

介绍 今天推荐一款完全免费的ETCD客户端&#xff0c;可以私有化部署: etcd-workbench 开源地址&#xff1a;https://github.com/tzfun/etcd-workbench Gitee地址&#xff1a;https://gitee.com/tzfun/etcd-workbench 下载 本地运行 从 官方Release 下载最新版的 jar 包&am…

深度学习中反向传播算法简单推导笔记

反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)W(1)xb(1)z^{(1)} W^{(1)}xb^{(1)}z(1)W(1)xb(1) a(1)σ(z(1))a^{(1)} \sigma(z^{(1)})a(1)σ(z(1)) z(2)W(2)a(1)b(2)z^{(2)}W^{(2)}a^{(1)}b^{(2)}z(2)W(2)a(1)b(2) a(2)σ(z(2))a^{(2)} \sigm…

EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?

写过上一篇关于EF Core中读写分离最佳实践方式后&#xff0c;虽然在一定程度上改善了问题&#xff0c;但是在评论中有的指出更换到从数据库。那么接下来要进行插入此时又要切换到主数据库&#xff0c;同时有的指出是否可以进行底层无感知操作&#xff0c;这确实是个问题&#x…

【图论】【Kosaraju】刻录光盘(ssl 2344)

刻录光盘 ssl 2344 题目大意&#xff1a; 求连通块 原题&#xff1a; 题目描述 在JSOI2005夏令营快要结束的时候&#xff0c;很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家&#xff0c;以便大家回去后继续学习。组委会觉得这个主意不错&#xff01;可是组…

P4158-[SCOI2009]粉刷匠【dp,背包】

正题 https://www.luogu.com.cn/problem/P4158 题目大意 nnn个墙长度为mmm&#xff0c;每次可以粉刷一堵墙的连续一段区间&#xff0c;粉刷过的不能再粉刷。给出每个位置应该粉刷的颜色&#xff0c;然后求TTT次可以粉刷正确多少个位置。 解题思路 首先我们对于第iii堵墙处理出…

一文搞清到底什么是 .NET?

现在各种 .NET 满天飞&#xff0c;别说新手了&#xff0c;连我这样的老手都差点被绕进去。到底什么是 .NET 呢&#xff1f;通俗易懂&#xff0c;什么是.NET?什么是.NET Framework&#xff1f;什么是.NET Core? 这篇文章好长呀&#xff0c;不知道你看完了没有&#xff0c;其实…