最大路径异或和

news/2025/3/13 19:40:28/文章来源:https://www.cnblogs.com/benscode/p/18770789

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

题意:

给定义一颗带权树,求其中两个节点边权异或和最大值

思路:

结论是:树上两个节点i,j由于 x ^ x=0 的异或性质,所以其异或和为(根节点,i)路径异或和 xor (根节点,j)路径异或和

所以dfs求出每个节点和根节点的路径异或和,然后拉到01trie跑板子即可

#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define pb push_back
#define endl "\n"
#define fi first
#define se second
//#pragma GCC optimize(3)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 lll;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f;
const ll llmax=LLONG_MAX;
const int maxn=1e5+5;
const int mod=1e9+7;
struct trie{int ch[maxn*31][2],idx;void insert(int x){int p=0;for(int i=31;i>=0;i--){int j= (x>>i)&1;if(!ch[p][j])ch[p][j]=++idx;p=ch[p][j];}}int query(int x){int p=0,res=0;for(int i=31;i>=0;i--){int j= (x>>i)&1;if(ch[p][!j]){res+= (1<<i);//累加边权 p=ch[p][!j];}else{p=ch[p][j];}}return res;}
};
trie tries;
vector<pii>e[maxn];
int vis[maxn];
int a[maxn];
void dfs(int u,int res){vis[u]=1;a[u]=res;for(auto ed:e[u]){int v=ed.fi,w=ed.se;if(!vis[v]){dfs(v,res^w);}}
}
void solve(){int n;cin>>n;for(int i=1;i<n;i++){int u,v,w;cin>>u>>v>>w;e[u].pb({v,w});e[v].pb({u,w});}dfs(1,0);for(int i=1;i<=n;i++){tries.insert(a[i]);}	int ans=0;for(int i=1;i<=n;i++){ans=max(ans,tries.query(a[i]));}cout<<ans<<endl;
}signed main()
{ios::sync_with_stdio(false),cin.tie(0);int T=1;while(T--){solve();}return 0;
}

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

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

相关文章

github 2FA 双因素验证

- 参考连接:https://www.cnblogs.com/johnnyzen/p/17880870.html 我采用浏览器插件 在谷歌商店搜索: Authenticator: 2FA Clien 2、选择添加到扩展程序3,点击这个插件,记得使用免费的 切换到github的双重验证二维码界面 点击抓取二维码 然后就会出来验证码,输入即可-

GESP-Lv8总结(202406)

GESP C++ 八级 2024 年 06 月 题目链接 错题 ( T4 ) 有V个顶点、E条边的图的深度优先搜索遍历时间复杂度为 \(\color{red}{错误的:O(V})\) \(\color{green}正确的:O(V+E)\) 求时间复杂度,我们就需要先搞清楚源代码是什么?以下为 DFS 模板 void dfs(int now, int fa) {for(int…

城市林业的无声革命:人工智能与古老生态学如何重新设计城市

城市林业的无声革命:人工智能与古老生态学如何重新设计城市 在摩天大楼的阴影下,一场静悄悄的变革正在发生——它融合了硅芯片与古老根系,算法与原住民智慧。 作者:保罗桑杜作者利用 PicLumen 创建的图像城市森林不再只是城市规划中的装饰性附带元素。它们已成为活生生的实…

Andriod连接

1.创建项目:2.配置: AndroidManifest.xml添加语句点击查看代码<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />android:usesCleartextTraffic…

虚拟试衣间

虚拟试衣间 一、团队介绍 1.1 团队概况 1.1.1 博客展示链接 团队名,组长博客链接https://www.cnblogs.com/c-eng/p/18763232 1.1.2 团队项目描述 虚拟试衣间 1.1.3 队员风采 姓名:曾成鑫 风格:Excellent Nimble Talented Perfect 擅长的技术:Python 编程的兴趣:c++ 希望的…

AI Agent替代化成风,企业HR SaaS如何选?| 盘点2025国内HR SaaS厂商Top10

自2025年以来,前有DeepSeek搅动国内外AI圈,后又国内外各大厂商纷纷加速AI技术及产品应用落地,紧随而来,在AI Agent成为又一关键热词,Manus携“全球首款通用Agent产品”再次掀起一番躁动。 如此喧嚣热闹的背景之下,向广大人力资源从业者传递一个强烈信号:AI技术的发展正在…

python的基本运用(3)——索引、切片、字符串

一、索引 索引在公司中一般也叫下标,或角标定义:可我们可以直接使用索引来访问序列中的元素,同时索引可分为正向索引和负向索引两种,而切片也会用到索引,如下图:Python中有序列:字符,列表,元组无序:集合正向索引:从0开始负向索引:-1开始二、切片 定义:切片是指对操…

[算法学习记录] 并查集(附例题)

并查集简介 并查集是一种重要的数据结构,主要用于实现节点之间的合并查询操作(例如判断两个节点是否属于同一个连通块(共享同一个父节点的节点组成的集合叫连通块)),在解决不相交集合时有很大的用处;并查集同样常用于处理无向图,来描述接点的连通性,在初始化时,每个节…

Electron 进程间通信(IPC)方法详解

Electron 是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架,它是基于 Chromium 和 Node.js 构建的,而 Chromium 本身是采用多进程架构的,所以 Electron 也是多进程的。 Electron 是一个多进程框架,它的进程主要分为两类:主进程(Main Process) 和 渲染进程(R…

从零开始的web前端学习-JavaScript

JavaScript 是一种运行在客户端(浏览器)的编程语言,实现人机互动效果:网页特效(监听用户的某些行为并令网页进行反馈) 表单验证(针对表单数据的合法性进行判断) 数据交互(获取后台数据并渲染到前端)JavaScript 组成ECMAScript:基础语法核心 Web APIs:DOM(页面文档…

【Azure Service Bus】分享使用 Python Service Bus SDK 输出SDK内操作日志

问题描述 使用Python代码消费Service Bus中的消息,默认情况 Console 中的信息都是通过 print 打印输出。 有时候需要调查更多SDK中的日志,那么如何才能让SDK输出更多的日志呢?问题解答 方法就是引入 Logging SDK,然后再初始化 ServiceBusClient 对象时,设置logging_enabl…