The Xor-longest Path(trie树)
题目:
#10056. 「一本通 2.3 练习 5」The XOR-longest Path
解析:
做完#10051后就不是很难了
继续利用异或的性质有\(dis(u,v) = dis(1,u)\oplus dis(1,v)\)
把边权放到点上,然后字典树求最大异或值
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, m, num, cnt, tot, ans;
int id[N], a[N], head[N], sum[N];
bool vis[N];
struct node {
int v, nx, w;
} e[N];
struct trie {
int nx[2];
} E[N];
inline void add(int u, int v, int w) {
e[++num].nx = head[u], e[num].v = v, e[num].w = w, head[u] = num;
}
inline void insert(int x) {
bitset<35>b(x);
int rt = 0;
for (int i = 30; i >= 0; --i) {
int v = (int)b[i];
if (!E[rt].nx[v]) E[rt].nx[v] = ++cnt;
rt = E[rt].nx[v];
}
}
inline int query(int x) {
bitset<35>b(x);
int rt = 0, ret = 0;
for (int i = 30; i >= 0; --i) {
int v = (int)b[i];
if (E[rt].nx[v ^ 1]) ret = ret << 1 | 1, rt = E[rt].nx[v ^ 1];
else ret <<= 1, rt = E[rt].nx[v];
}
return ret;
}
void dfs(int u, int w) {
vis[u] = 1, a[u] = w;
for (int i = head[u]; ~i; i = e[i].nx) {
int v = e[i].v;
if (!vis[v]) dfs(v, e[i].w ^ w);
}
}
int main() {
ios::sync_with_stdio(false);
memset(head, -1, sizeof head);
cin >> n;
for (int i = 1, x, y, z; 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, query(a[i]));
insert(a[i]);
}
cout << ans;
}
return 0;
The Xor-longest Path(trie树)的更多相关文章
- Poj 3764 The xor-longest Path(Trie树+xor+贪心)
The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6455 Accepted: 1392 ...
- 【bzoj1954】Pku3764 The xor-longest Path Trie树
题目描述 给定一棵n个点的带权树,求树上最长的异或和路径 输入 The input contains several test cases. The first line of each test ...
- POJ3764 The xor-longest path Trie树
代码写了不到30分钟,改它用了几个小时.先说题意,给你一颗树,边上有权,两点间的路径上的路径的边权抑或起来就是路径的xor值,要求的是最大的这样的路径是多少.讲到树上的两点的xor,一个常用的手段就是 ...
- HDU 4825 Xor Sum (trie树处理异或)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- POJ 3764 The xor-longest Path trie树解决位运算贪心
http://poj.org/problem?id=3764 题意 : 一颗树,每个边有个值,在树上找一条简单路径,使得这条路径上的边权异或值最大 先找到所有节点到一点的距离 , 显然dis( x ...
- HDU4825 Xor Sum(贪心+Trie树)
Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeu ...
- poj3764 The XOR Longest Path【dfs】【Trie树】
The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10038 Accepted: ...
- 题解 bzoj1954【Pku3764 The xor – longest Path】
做该题之前,至少要先会做这道题. 记 \(d[u]\) 表示 \(1\) 到 \(u\) 简单路径的异或和,该数组可以通过一次遍历求得. \(~\) 考虑 \(u\) 到 \(v\) 简单路径的异或和 ...
- Xor - Trie树
题目描述 求一棵带边权的树的一条最大 Xor 路径的值.这里的"路径"不一定从根到叶子结点,中间一段路径只要满足条件也可以. 输入格式 第一行,一个整数 N ,表示一颗树有 N 个 ...
随机推荐
- CSP复习与模板
P3366 [模板]最小生成树 Kruskal 算法因为只与边相关,则适合求稀疏图的最小生成树.而 Prim 算法因为只与顶点有关,所以适合求稠密图的最小生成树. Prim 是以更新过的节点的连边找最 ...
- Mybatis-plus中不列出全部字段
//不列出全部字段 @Test public void test10() { QueryWrapper<User> wrapper = new QueryWrapper<>() ...
- nginx 搭建上传服务器
nginx webdav 服务器搭建 该模块可以为Http webDAV 增加PUT,DELETE,MKCOL,COPY和MOVE等方法.模块在默认编译的情况下是不被包含的,需要指定编译 ./conf ...
- 【java】字符串截取
String a = 'abcdef';String a = a.substring(0,1); a = 'a'; substring(int beginIndex, int endIndex) be ...
- springCloud值Eureka
Spring Cloud特点 约定优于配置 开箱即用.快速启动 适用于各种环境 PC Server 云环境 容器(Docker) 轻量级的组件 服务发现Eureka 组件的支持很丰富, ...
- 请指出document load和document ready的区别
document load文档的所有内容都加载完成 document ready文档的DOM加载完成
- 编写一个方法去掉数组里面重复的内容 var arr=['abc','abcd','sss','2','d','t','2','ss','f','22','d'];
function noRepeat(arr) { var arr1 = []; for (var i = 0; i < arr.length; i++) { var item = arr[i]; ...
- 【题解】hdu1506 Largest Rectangle in a Histogram
目录 题目 思路 \(Code\) 题目 Largest Rectangle in a Histogram 思路 单调栈. 不知道怎么描述所以用样例讲一下. 7 2 1 4 5 1 3 3 最大矩形的 ...
- TensorFlow多层感知机函数逼近过程详解
http://c.biancheng.net/view/1924.html Hornik 等人的工作(http://www.cs.cmu.edu/~bhiksha/courses/deeplearni ...
- Python全栈--目录导航
这里更新以Python语言作为基础,想要成为全栈工程师需要掌握的技能... Python基础语法 day01 初识Python day02 while循环 运算符和编码 day03 字符串 day04 ...