首页 > 其他分享 >P4551 最长异或路径

P4551 最长异或路径

时间:2023-03-08 20:36:40浏览次数:52  
标签:ch int 路径 P4551 异或 num hd

给定一棵 nn 个点的带权树,结点下标从 11 开始到 nn。寻找树中找两个结点,求最长的异或路径。

异或路径指的是指两个结点之间唯一路径上的所有边权的异或。

 

处理出每个点的树上异或前缀

 这些异或值按照二进制数插入Trie

经典问题了

 

 

#include <iostream>
#include <cstring> 
using namespace std;
const int N=1e6+10,M=N;
int tot=1,ch[N][2];
int n,nxt[M],go[M],hd[N],w[M],all=1;
int g[N];
 void add_(int x,int y,int z){
 	go[++all]=y; w[all]=z;nxt[all]=hd[x]; hd[x]=all;
 }
 
 void dfs(int x,int fa){
 	
 	for(int i=hd[x];i;i=nxt[i]){
 		int y=go[i],z=w[i]; if(y==fa) continue;
 		g[y]=z^g[x];
 		dfs(y,x);
 	}
 }
 void insert(int num){
 	int u=1,c;
 	
 	for(int i=31;i>=0;i--){
 		c=(num>>i)&1;
 		
 		if(ch[u][c]==0) ch[u][c]=++tot;
 		u=ch[u][c];
 	}
 }
 int find(int num){
 	int u=1,c,t=0;
 	
 	for(int i=31;i>=0;i--){
 		c=(num>>i)&1;
 		if(ch[u][c^1]) u=ch[u][c^1],t=t*2+1;
 		else u=ch[u][c],t*=2;
 	}
 	return t;
 }
 
 
 signed main(){
 	cin>>n;
 	int x,y,z,ans=0;
 	for(int i=1;i<n;i++) 
 		cin>>x>>y>>z,add_(x,y,z),add_(y,x,z);
 	dfs(1,0);
 	
 	for(int i=1;i<=n;i++){
 		ans=max(ans,find(g[i]));
 		insert(g[i]);
 	}
 	cout<<ans;
 }
 
 

 

标签:ch,int,路径,P4551,异或,num,hd
From: https://www.cnblogs.com/towboa/p/17196001.html

相关文章

  • Thinking--快速找出故障机器(异或)
    Thinking系列,旨在利用10分钟的时间传达一种可落地的编程思想。假设一个机器仅存储一个标号为ID(数值)的记录,且该数据会保存备份(即,两个机器存储了同样的数据;类似于双节点部署)......
  • 获取当前jar包路径_java获取jar文件
    一、获取可执行jar包所在目录(1)方法一:使用System.getProperty("java.class.path")获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包的绝对......
  • 获取当前jar包路径_java获取jar文件
    一、获取可执行jar包所在目录(1)方法一:使用System.getProperty("java.class.path")复制获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包......
  • K8s里containerd作为runc时,相关文件映射到node的具体路径
    containerd为runc时,标准输出(stdout)的日志文件存放在node:/var/log/containerscontainerd为runc时,运行的所有文件(merger层)存放在node:/run/containerd/io.containerd.runti......
  • 力扣---64. 最小路径和
    给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例1:输入:grid=[[1,3,1......
  • urllib.parse:很底层,但是是一个处理url路径的好模块
    介绍urllib.parse是为urllib包下面的一个模块,urllib的其它模块完全可以使用requests替代。但是urlli.parse我们是有必要了解的,因为该模块下面有很多操作url路径的方法ur......
  • 关键路径与时序优化
    关键路径关键路径通常是指同步逻辑电路中,组合逻辑时延最大的路径(这里我认为还需要加上布线的延迟),也就是说关键路径是对设计性能起决定性影响的时序路径。对关键路径进行时......
  • Marddown 使用VSCode预览 不显示图片 文件路径正确
    今天用Markdown写总结,图片变成了这样:文件路径是这个:C:\Users\dell\Desktop\A_Folder\#笔记开始以为是路径里有中文的原因,改成了全英文,但还是不显示。于是把"#"也删......
  • 与&,或|,异或^运算
    与&,或|,异或^运算1.与&运算运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;两位同时为“1”,结果才为“1”,否则为0。2.或|运算运算规则:0|0=0;  0|1=1;  ......
  • 更改windows桌面路径的教程
    第一步:键盘上按住"win+E"打开文件资源管理器,然后快速访问的桌面,点击“属性”。第二步:默认桌面在用户名下的Desktop文件夹,比如:C:\Users\ataola\Desktop,在注册表的路径为......