当前位置:网站首页>最长异或路径(dfs+01trie)
最长异或路径(dfs+01trie)
2022-06-29 17:47:00 【eva_can(not)survive】
最长异或路径 - 洛谷https://www.luogu.com.cn/problem/P4551先用dfs把节点1到所有点的异或路径值求出来,根据异或性质可以得出任意两点得异或距离,此时问题为求两点最大异或距离,可以转化为给一个数求一个序列中其最大异或值,就可以用01trie来写了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#define lowbit(x) ((x)&(-x))
using namespace std;
using ll = long long;
using ull = unsigned long long;
using P = pair<int,int>;
using pll=pair<ll,ll>;
const int MAXN=1e6+5;
const int INF=0x3f3f3f3f;
const ll NNF=0x3f3f3f3f3f3f3f3f;
const int MAXBIT=31;
int n;
int head[MAXN];
int ver[MAXN];
int cost[MAXN];
int num[MAXN];
int nxt[MAXN];
int tri[MAXN][2];
int rec=1;
int cnt;
void add(int x,int y,int c){
ver[++cnt]=y;
cost[cnt]=c;
nxt[cnt]=head[x];
head[x]=cnt;
}
int d[MAXN];
void dfs(int p,int fa){
// printf("===\n");
for(int i=head[p];i;i=nxt[i]){
int v=ver[i];
if(v==fa) continue;
d[v]=d[p]^cost[i];
dfs(v,p);
}
}
void insert(int x){
int cur=1;
for(int i=MAXBIT;i>=0;i--){
int bit=x>>i&1;
if(!tri[cur][bit]) tri[cur][bit]=++rec;
cur=tri[cur][bit];
}
num[cur]=x;
}
int find_max(int x){
int cur=1;
for(int i=MAXBIT;i>=0;i--){
int bit=x>>i&1;
if(tri[cur][bit^1]) cur=tri[cur][bit^1];
else cur=tri[cur][bit];
}
return x^num[cur];
}
int main(){
scanf("%d",&n);
int x,y,c;
for(int i=1;i<n;i++){
scanf("%d %d %d",&x,&y,&c);
add(x,y,c);
add(y,x,c);
}
dfs(1,-1);
for(int i=1;i<=n;i++){
insert(d[i]);
}
int mx=0;
for(int i=1;i<=n;i++){
mx=max(mx,find_max(d[i]));
}
printf("%d",mx);
return 0;
}
边栏推荐
猜你喜欢

Parental delegation mechanism

Opencv+yolo-v3 for target tracking

迈动互联中标大家保险集团

数字孪生能源系统,打造低碳时代“透视”眼

Two controller layer interface authentication methods

Openfeign use step polling strategy and weight log4j configuration of openfeign interceptor

剑桥大学教授:经常吃早餐害处多,很危险 - 知乎
![填充每个节点的下一个右侧节点指针[利用好每个点->尽可能降低时空复杂度]](/img/33/bda0a898bfe3503197026d1f62e851.png)
填充每个节点的下一个右侧节点指针[利用好每个点->尽可能降低时空复杂度]

Basic operations such as MySQL startup under Windows platform

Issue 42: is it necessary for MySQL to have multiple column partitions
随机推荐
2022 spring summer collection koreano essential reshapes the vitality of fashion
Can MySQL views create indexes
ISO 32000-2 国际标准7.7
Industry application of smart city based on GIS 3D visualization
What is the SRM system? How do I apply the SRM system?
关于日期相加减问题
国外LEAD赚钱,做个网站真的很简单
SSH协议学习笔记
DevCloud加持下的青软,让教育“智”上云端
Serial port experiment based on stm32f103zet6 library function
Mysql database literacy, do you really know what a database is
传承中华美德,关注中老年大健康,育润奶粉敬老情浓
How to use the chart control of the b/s development tool devextreme - customize the axis position?
VB.Net读写NFC Ntag标签源码
Web Scraping with Beautiful Soup for Data Scientist
基于注解和拦截器防止表单重复提交
3h精通OpenCV(五)-透视变换
[Oracle] basic knowledge interview questions
The R language inputs the distance matrix to the hclust function for hierarchical clustering analysis. The method parameter specifies the distance calculation method between two combined data points,
R language uses user-defined functions to write deep learning linear activation functions and visualize linear activation functions