The xor-longest Path poj3764
3764 -- The xor-longest Path
题目大意:有一棵n个点的树,树上每条边都有边权,求任意两点之间的简单路径的边权的异或和最大是多少
1<=n<=1e5
思路:因为异或和可以忽略重合的部分,所以两个点之间的路径的异或和就是每个点到他们的公共组先的异或和,那么我们直接从第一个节点出发dfs记录每一个点i(包括第一个点)到第一个点的异或和dx[i],然后我们只需要在所有的dx中找出异或值最大的两个点,用字典树可以做到O(n),trie[i][j]表示二进制从左到右忽略公共前缀的第i位数字是j,对于一个要查询的dx[i],我们在字典树中优先查找与每一位数相反的前缀,得到的便是最大值
边权树如上图,可得出0到各点的异或和dx为0,7,5
字典树(2的0次方到2次方部分)如上图
#include<__msvc_all_public_headers.hpp>//vs代码
using namespace std;
const int N = 1e5 + 5;
int head[N],trie[N*32][2];
int n, dx[N];
struct node
{int v, next, w;
}e[N << 1];
int cnt = 0;
void addedge(int u, int v, int w)
{//链式前向星存图e[++cnt].v = v;e[cnt].w = w;e[cnt].next = head[u];head[u] = cnt;
}
void init()
{memset(e, 0, sizeof e);memset(head, 0, sizeof head);memset(trie, 0, sizeof trie);memset(dx, 0, sizeof dx);
}
void dfs(int u, int fa)
{//遍历每个点,求出每个点到0点的异或和for (int i = head[u]; i; i = e[i].next){int v = e[i].v, w = e[i].w;if (v == fa)//防止重复遍历continue;dx[v] = dx[u] ^ w;dfs(v, u);}
}
int tot = 1;
void build(int num)
{//构建字典树int p = 1;for (int i = 30; i >= 0; i--)//数据范围0~2^31{bool k = num & (1 << i);//判断二进制的每一位为0或1if (!trie[p][k])trie[p][k] = ++tot;p = trie[p][k];}
}
int query(int num)
{//对于每个dx[i],求出他和其他所有数异或的最大值int p = 1, ret = 0;for (int i = 30; i >= 0; i--){bool k = num & (1 << i);if (trie[p][k ^ 1])//如果这一位有与当前查询数字相反的,优先走这条路{ret += 1 << i;//答案+p = trie[p][k ^ 1];}else{p = trie[p][k];}}return ret;
}
int main()
{while (~scanf_s("%d", &n)){init();for (int i = 1; i <= n - 1; i++){int u, v, w;scanf_s("%d%d%d", &u, &v, &w);addedge(u, v, w);addedge(v, u, w);}dfs(0, 0);for (int i = 0; i <= n - 1; i++){build(dx[i]);}int ans = 0;for (int i = 0; i <= n - 1; i++){ans = max(ans, query(dx[i]));//维护答案最大值}printf("%d\n", ans);}return 0;
}
The xor-longest Path poj3764相关推荐
- 2021牛客国庆集训派对day1 H - Longest Path
Description 给你一棵树,边有边权, 定义一条从u到v的路径,这一路上经过的点为e1,e2,...,eke_1,e_2,...,e_ke1,e2,...,ek 定义这条路径的权值f(u ...
- 【Leetcode】2246. Longest Path With Different Adjacent Characters
题目地址: https://leetcode.com/problems/longest-path-with-different-adjacent-characters/ 给定一棵 n n n个节点的有 ...
- 【读书笔记】《算法竞赛进阶指南》读书笔记——0x10基本数据结构
to do(perhaps never) CH1401 后缀数组 所有课后题 栈 例题:HDU4699 Editor 维护一个整数序列的编辑器,支持以下五种操作: I x:在当前光标位置处插入一个整数 ...
- 提高篇 第二部分 字符串算法 第3章 Trie字典树
Trie(字典树)解析及其在编程竞赛中的典型应用举例 - Reqaw - 博客园 『一本通』Trie字典树 - YeLingqi - 博客园 字典树(Trie Tree) - 仰望高端玩家的小清新 - ...
- UVa10000 - Longest Paths(为什么是WA)
/**** 用dfs并且用了剪枝,为什么还是WA*/ #include <iostream> #include <fstream> #include <cstring&g ...
- 2015南阳CCPC E - Ba Gua Zhen 高斯消元 xor最大
Ba Gua Zhen Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 无 Description During the Three-Kingdom perio ...
- xnet , static phase , dynamic phase , longest pin pairs
转载于: https://jiaodi.tech/2017/07/09/allegro-guide-2/ Xnet的设置 实际的电路设计中,差分线与等长线之间往往串接一个电阻用于匹配,或者说用于调 ...
- WPF 使用Path绘制几何图形
Path类继承自Shape,可以绘制很多简单的,复合的图形.Path类通过提供的Data属性,Data属性接受一个Geometry对象(我的理解就是Data要装什么集合图形呀),Geometry一共有 ...
- Cow Contest POJ - 3660 And Longest Paths UVA - 10000(弗洛伊德的应用)
Problem Description N ( 1 ≤ N ≤ 100 ) N (1 ≤ N ≤ 100) N(1≤N≤100) cows, conveniently numbered 1.. N 1 ...
- 微软等数据结构+算法面试100题全部答案集锦
微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...
最新文章
- dac生成信号频率取决于_DAC和AOC,谁将是数据通信领域最终赢家?
- JavaScript获取浏览器、元素、屏幕的宽高尺寸
- mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题
- 了解ADF生命周期中的ADF绑定
- 1584 - Circular Sequence
- 应用数据挖掘进行客户关系管理
- KND数控系统PLC开发环境
- 从物理到软件工程,中山大学转专业2017纪实
- Gitbub 基本使用
- narwal无法连接机器人_ABB机器人驱动通讯连接不上故障维修方法
- CSS3实现圆圈动态发光特效动画
- 梦幻西游唯美版3D模型展示
- 大学英语综合教程三 Unit 8 课文内容英译中 中英翻译
- 大漠插件ocr多选字库_易语言大漠插件模块制作设置字库及Ocr识别字符串游戏识别文字...
- c语言用矩形法计算积分,C++编程:写一个用矩形法求定积分的通用函数
- c语言64位long多少字节,64位操作系统下,关于int和long占用字节数同为4问题
- 详细解析Java和PHP到底哪个好!!
- bt服务器搭建 linux_CentOS 4.5 下搭建BT下载服务器安装笔记
- 解密“抗风险神器”:量化中性是如何赚钱的
- EDIUS转场特效插件下载v10.1.0.577免费版
热门文章
- stc15单片机c语言 pdf,stc15单片机编程指南.pdf
- C++之 Eigen-3.4.0 全方位教程:Chapter02-矩阵篇
- C#之放入透明背景字体(label标签的透明设置)
- SAP 费用分摊分配用法(KSU5/KSV5/KB21N/KB11N)
- python计算log函数
- POI 导出Excel,部分单元格的锁定和背景至灰
- 读书笔记(穷查理宝典)
- 数模系列(3):模糊综合评价法
- Word2010怎么绘制斜线表头
- java m个苹果n个篮子_m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法...