【POJ No. 3764】 最长xor 路径 The xor-longest Path

news2024/11/19 19:25:22

【POJ No. 3764】 最长xor 路径 The xor-longest Path

北大OJ 题目地址

在这里插入图片描述

【题意】

在边权树中,路径p的xor长度被定义为路径p上边权的

在这里插入图片描述

,⊕是xor运算符,表示异或。若一个路径有最大的xor长度,则该路径是xor最长的路径。给定n 个节点的边权树,找到xor最长的路径。

【输入输出】

输入:

输入包含几个测试用例。每个测试用例的第1行都包含一个整数n (1≤n ≤100000),表示节点数。以下n -1行,每行都包含三个整数u 、v 、w (0≤u , v <n ,0≤w <231 ),表示节点u 和v 之间的长度为w 。

输出:

对每个测试用例,都单行输出xor最长的路径长度。

【样例】

在这里插入图片描述

【思路分析】

输入样例构建的树如下图所示。

在这里插入图片描述

路径0-1-2的xor长度为7(3⊕4=7),是最大的,机内表达为二进制异或运算011⊕100=111。

dx[i ]表示根节点到节点i 路径上所有边权的xor值。通过一次深度优先搜索可以求出所有节点的dx[i ]。树上任意两个节点u 、v 路径上边权的xor值等于dx[u ] xor dx[v ],因为x 和x 异或等于0,所以路径重复的部分会抵消。

问题转变为在dx[1]~dx[n ]中选出两个,求xor的最大值。

考虑问题:给定序列a 1 , a 2 , …, an ,对任意两个数进行xor运算,得到的最大值是多少?可以通过ai 和a 1 , a 2 , …, ai -1 异或,得到一个最大值,枚举i =2, 3, …, n ,取最大值即可。首先将a 1 ,a 2 , …, ai -1 按位插入字典树中,然后沿着与ai 当前位相反的路径走,若与ai 当前位相反的路径不存在,则走ai 当前位。

【算法设计】

① 根据输入数据采用链式前向星存储。

② 深度优先遍历,求解每个节点的dx[i ],即树根到当前节点路径上边权的xor值。

③ 在字典树中查找dx[i ]的异或结果,求最大值,并将dx[i ]插入字典树中。

④ 输出最大值。

【算法实现】

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

const int maxn=100005;
int n,mx;//n个节点,最大值 
int trie[maxn*32][2],tot;//字典树存储的是01位 
int head[maxn],dx[maxn],cnt;//头结点,从根到当前节点所有边权的xor值 
struct Edge{
	int to,w,next;
}e[maxn<<1];
 
void add(int u,int v,int w){
	e[++cnt].to=v;
	e[cnt].w=w;
	e[cnt].next=head[u];
	head[u]=cnt;
}

void dfs(int u,int f){//求dx,从根到当前节点所有边权的xor值 
	for(int i=head[u];i;i=e[i].next){
        int v=e[i].to,w=e[i].w;
        if(v==f)//父节点 
			continue;
        dx[v]=dx[u]^w; 
        dfs(v,u);
    }
}

void insert(int num){
	int p=1;
	for(int i=30;i>=0;i--){
		bool k=num&(1<<i);
		if(!trie[p][k])
			trie[p][k]=++tot;
		p=trie[p][k];
	}
}

int find(int num){
	int p=1,res=0;
	for(int i=30;i>=0;i--){
		bool k=num&(1<<i);
		if(trie[p][k^1]){//走相反路径
			res+=1<<i;
			p=trie[p][k^1];
		}
		else
			p=trie[p][k];
	}
	return res; 
}

void init(){
	memset(head,0,sizeof(head));
	memset(trie,0,sizeof(trie));
	cnt=0;
	tot=1;
	mx=0;
}

int main(){
	
	int u,v,w;
	while(~scanf("%d",&n)){
		init();
		for(int i=1;i<n;i++){//n-1条边
			scanf("%d%d%d",&u,&v,&w);
			add(u+1,v+1,w);
			add(v+1,u+1,w);
		}
		dx[1]=0;
		dfs(1,0);
		insert(dx[1]);
		for(int i=2;i<=n;i++){
			mx=max(mx,find(dx[i]));
			insert(dx[i]);
		}
		printf("%d\n",mx);
	}
	
	return 0;
}

在这里插入图片描述

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

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

相关文章

如何正确使用Airtest报告插件?报告小tips上线

1. 前言 在使用Airtest做自动化测试时&#xff0c;默认生成的报告&#xff0c;其实是airtest的专属报告。 它对于poco语句&#xff08;控件测试场景&#xff09;、airtest-selenium语句&#xff08;web测试场景&#xff09;的支持不够完善&#xff0c;因此我们需要用 插件的形…

Shell脚本学习指南(六)——输入/输出、文件与命令执行

文章目录前言标准输入、标准输出与标准错误输出使用read读取行关于重定向额外的重定向运算符文件描述符处理printf的完整介绍波浪号展开与通配符波浪号展开使用通配符命令替换为head命令使用sed创建邮件列表简易数学&#xff1a;expr引用执行顺序与evaleval语句subShell与代码块…

CAS:210236-90-1,Fluorescein Tyramide,荧光素酪胺绿色荧光试剂

一&#xff1a;产品描述 1、名称 英文&#xff1a;Fluorescein Tyramide 中文&#xff1a;荧光素酪胺 2、CAS编号&#xff1a;210236-90-1 3、分子式&#xff1a;C29H21NO7 4、分子量&#xff1a;495.49 6、储存&#xff1a; -20℃可长期保存&#xff0c;注意避光并置于…

个人微信号API接口,微信机器人

自定义的微信机器人&#xff0c;需求是可以自己批量添加好友、批量打标签等进行好友管理&#xff0c;社群管理需要自动聊天&#xff0c;自动回复&#xff0c;发朋友圈&#xff0c;转发语音&#xff0c;以及定时群发等&#xff0c;还可以提取聊天内容&#xff0c;进行数据汇总&a…

美妆商场系统/在线购物系统/美妆销售系统

摘 要 本毕业设计的内容是设计并且实现一个基于JSP技术的美妆商场系统。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。美妆商场系统的功能已基本实现&#xff0c;主要包括个人中心、用户管理、商品中心管理、商品类型管…

故障分析 | MySQL 使用 load data 导入数据错误的一个场景

作者&#xff1a;刘晨 网名 bisal &#xff0c;具有十年以上的应用运维工作经验&#xff0c;目前主要从事数据库应用研发能力提升和技术管理相关的工作&#xff0c;Oracle ACE &#xff0c;腾讯云TVP&#xff0c;拥有 Oracle OCM & OCP 、EXIN DevOps Master 、SCJP 等国际…

HashSet、HashMap、LinkedHashMap、HashTable、ConcurrentHashMap源码阅读笔记

目录一、HashSet二、HashMap三、LinkedHashMap四、HashTable五、ConcurrentHashMap一、HashSet 首先&#xff0c;让我们先从最简单的开始&#xff0c;总的来说&#xff0c;hashSet可以说是建立在hashMap上的变种应用。 通过阅读hashSet的源码我们可以得出以下结论&#xff1a;…

1556_AURIX_TC275_复位系统控制单元

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这是上一部分没有看完的CCU的核心寄存器的存储映射信息&#xff0c;只是一个汇总&#xff0c;没有需要着重处理的分析点。 复位控制单元涉及到的几个大功能&#xff1a;基本复位、外部复位…

订单服务-----遇到的问题及解决方案

订单服务的问题及解决方案 问题1&#xff1a;Feign远程调用时丢失请求头 出现这个Feign远程调用时丢失请求头的问题是因为Feign在远程调用的时候会创建一个新的请求&#xff0c;但是这个新的请求里啥都没有&#xff0c;没有cookie值&#xff0c;而这个cookie值里有成功登录后的…

投稿MDPI旗下期刊的一些心得和记录

投稿历程&#xff1a; 09.02 提交初稿 under review 09.05 分配助理编辑&#xff0c;论文送审 10.13 第一轮审稿完毕&#xff0c;大修&#xff0c;两个审稿人 Pending Major Revisions 10.16 语言问题需要润色&#xff0c;使用MDPI润色机构 10.19 重新提交修改稿 Resubmitt…

【Axure教程】中继器版穿梭表格

表格是我们系统中常用的组件&#xff0c;穿梭表格就是使用直观方式在两个表格中移动数据&#xff0c;实现数据的流动。今天作者就教大家如何在Axure里用中继器制作出表格穿梭的效果&#xff1a; 1、选中效果&#xff1a;鼠标点击表格中所在的行&#xff0c;可以选中该行数据 …

【Vue 快速入门系列】组件的基本使用

文章目录一、组件的概念二、非单文件组件三、单文件组件1.main.js2.App.vue3.school.vue4.student.vue5.index.html四、内容补充及原理剖析1.组件命名注意点2.组件嵌套内置关系3.重要的内置关系一、组件的概念 组件&#xff08;Component&#xff09;是 Vue.js 最强大的功能之…

Java日期与时间

时间与日期DateSimpleDateFormatCalendarJDK8新增日期类概述LocalDate、LocalTime、LocalDateTimeInstant时间戳DateTimeFormatterDuration/PeriodChronoUnitDate Date类概述 Date类的对象在Java中代表的是当前所在系统的此刻日期时间。 Date的构造器 Date的常用方法 Date类…

2022最新 MySQL事务面试题合集

小熊学Java网站&#xff1a;https://javaxiaobear.gitee.io/&#xff0c;每周持续更新干货&#xff0c;建议收藏&#xff01; 61、什么是数据库事务&#xff1f;事务的特性是什么&#xff1f; 事务&#xff1a; 是数据库操作的最小工作单元&#xff0c;是作为单个逻辑工作单元执…

微服务框架 SpringCloud微服务架构 25 黑马旅游案例 25.2 条件过滤

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构25 黑马旅游案例25.2 条件过滤25.2.1 直接开干25 黑马旅游案例 25.2 条件…

怎么把磁盘合并成一个?两个硬盘分区合并,如何硬盘分区合并

怎么把磁盘合并成一个&#xff1f;有时候电脑分区有点多&#xff0c;想要给硬盘的分区合并不知道如何操作&#xff0c;如何在不影响系统正常使用的情况下合并分区呢&#xff1f;本篇文章将详细解答这个问题。 之前有个客户提出这样一个问题&#xff0c;那就是在安装完windows10…

【CSS3】text-shadow/text-overflow,边框图片,透明度,小米轮播图子菜单另一种实现

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录text-shadowtext-overflow边框图片border-image-sourceborder-image-sliceborder-image-widthbor…

数据智仓功能介绍(一)

数据智仓英文名称为Smart Data Warehouse&#xff0c;可简写为SDW。数据智仓是JVS整体企业数字化解决方案的核心能力&#xff0c;与JVS的低代码开发套件平级。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;为企业提供基于数据的决策支持&#xff08;Decision Supp…

世界杯论文

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿…

cockpit管理控制台-尚文网络xUP楠哥

~~全文共1499字&#xff0c;阅读需约5分钟。 进Q群11372462&#xff0c;领取专属报名福利&#xff0c;包含云计算学习路线图代表性实战训练大厂云计算面试题资料! Cockpit 是红帽开发的web方式的服务管理工具&#xff0c;从Linux7版本开始就有了&#xff0c;其优点可以管理很多…