首页 > The XOR-longest Path
头像 __故人__
发表于 2020-09-16 15:09:18
分析 在一颗树上寻找一条异或值最大的简单路径。先考虑到异或有如下性质 。所以异或两个相同的值时等同于没有异或。所以,树上的简单路径的异或值其实可以看做 。 表示节点 到根的异或和。因为 的值计算了两次,相当于是抵消了。那么题目转化为,在一个序列上找两个节点使他们的异或值最大。显然这个过程需要 展开全文
头像 又在摸鱼的大熊猫很勤奋努力
发表于 2020-09-16 15:18:43
The XOR-longest Path 题目大意 给定一棵树, 让你求树上异或和最大的简单路径的异或和 分析 想要异或和最大, 那么我们想要的显然是贪心, 那就是尽量让他们在二进制下不相同 这样考虑的话, 我们可以想到的是字典树, 从高次项向低处贪心, 能保证最值 那么还有一个问题, 如何求一个简 展开全文
头像 林思艺
发表于 2020-09-16 16:01:30
首先说一下题意。 这题就是给你一棵树,求树上所有路径中异或和最大的。 一个前置小芝士:01trie树不会的童鞋自行百度一下(雾) 好了,分析一下本题 我们对于每一个数到根节点的异或和进行建01trie树。我们知道一个数,如果它两次异或同一个数,那么它是不会变的。所以i-j的路径上的异或和,就可以表示 展开全文
头像 Dear㉿You
发表于 2020-09-20 08:24:49
分析 根据题目可以看出这是一棵典型的01字典树,要求树上路径的异或最大值,n<=1e5。我们不可能O(n^2)扫过,我们画个图分析一下: 当我们要求3与4之间的异或路径,第一个方法是倍增,但会超时。但是如果我们记录一个dis[i]表示i->1路径上的异或权值,那么3,4之间的异或权值 展开全文
头像 熠丶
发表于 2020-09-16 23:35:07
由题意可知这是一道经典的字典树模板将数的二进制表示看做一个字符串,就可以建出字符集为{0,1}的 trie 树。 思路: 1.邻接表建树(链式前向星也行)2.先dfs求出每个点到root的异或值,记为a[i],则有u到v的异或值等于a[u]^a[v]3.u到root的路径与v到root的路径会有重叠 展开全文
头像 嘻嘻嘻嘻嘻嘻嘻
发表于 2020-09-16 15:42:44
前置知识:01trie树分析: 01trie树提供给我们的功能为我们塞进去一些数,然后我们可以logn内查询与其最大的异或和值。 那不刚好可以满足我们o(n^2)暴力吗。。 #include<bits/stdc++.h> typedef long double ld; #define 展开全文
头像 WuliWuliiii
发表于 2020-09-16 15:43:40
经典的字典树问题,我们知道查询任意两点的路径异或值为所以,我们求出从根节点到每个节点的异或值,然后将这些值放到字典树上去进行查询就可以求得每个点的与其余点的最大路径异或权值了。 #include <iostream> #include <cstdio> #include &l 展开全文
头像 DeNeRATe
发表于 2020-09-16 16:01:56
分析 由异或的性质 我们设表示号节点到根节点路径权值的异或和所以对于一条树上简单路径其异或和那么我们就可以转化题意:给定个值,求 所以我们可以直接二进制拆分,建立01Trie树贪心走异或最大值即可 代码 //×Òì»ò·¾¶ #include<iostream> #include 展开全文
头像 程序蒟蒻
发表于 2020-09-22 20:27:12
利用异或的性质转化,再用字典树维护。首先我们知道树上两点必定有且只有一条简单路径,并且他们的关系有两种情况1.他们具有祖孙关系,对于这种情况,我们记f[i]表示根节点到i的异或路径,那么f[i]xor f[j]即为i,j的异或路径2.他们不具有祖孙关系,那么我们假如已知他们的LCA,根据第一种情况, 展开全文
头像 issue是云哥的小迷×呀
发表于 2020-10-04 11:15:41
发现题面很类似这样一个经典问题: 给出一堆数字,再给你一个数,找到那堆数中与这个数异或最大的 这个问题很经典了,直接建立字典树 对于每个数,二进制分解,然后把二进制从高位到低位插入到字典树上 形成一个深度为的字典树,异或最大值就不停的贪心选择走还是走即可 但是树上路径没那么简单了,不再是简单的两数异 展开全文

等你来战

查看全部