[洛谷P4592][TJOI2018]异或】的更多相关文章

P4592 [TJOI2018]异或 题目描述 现在有一颗以\(1\)为根节点的由\(n\)个节点组成的树,树上每个节点上都有一个权值\(v_i\).现在有\(Q\)次操作,操作如下: 1 x y:查询节点\(x\)的子树中与\(y\)异或结果的最大值 2 x y:查询路径\(x\)到\(y\)上点与\(z\)异或结果最大值 输入输出格式 输入格式: 第一行是两个数字\(n,Q\); 第二行是\(n\)个数字用空格隔开,第\(i\)个数字\(v_i\)表示点\(i\)上的权值 接下来\(n-1\…
题目大意:有一棵$n$个点的树,第$i$个点权值为$w_i$,有两种操作: $1\;x\;y:$询问节点$x$的子树中与$y$异或结果的最大值 $2\;x\;y\;z:$询问路径$x$到$y$上点与$z$异或结果最大值 题解:树剖,然后就可以把树上问题转化为序列上的问题,可持久化$Trie$即可 卡点:树剖判断条件错 C++ Code: #include <algorithm> #include <cstdio> #define maxn 100010 #define M 30 #…
题意 题目链接 可持久化01Trie板子题 对于两个操作分别开就行了 #include<bits/stdc++.h> using namespace std; const int MAXN = 4e5 + 10, SS = MAXN * 42 + 10; const int B = 31; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-')…
题目链接 BZOJ4592 题解 可持久化trie树裸题 写完就A了 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<map> #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt) #define REP(i,n) for (i…
题目传送门:洛谷P4592. 题意简述: 题面说的很清楚了. 题解: 发现没有修改很快乐.再看异或最大值操作,很容易想到可持久化 01trie. 这里要把 01trie 搬到树上,有点难受. 树剖太捞了,考虑 DFS 序. 子树查询转成 DFS 序上一段区间,而链上查询转成两条链. 所以维护两(个?)种可持久化 01trie,一个按照 DFS 序,另一个按照从根到结点的路径. 还要求 LCA,这里我写了个倍增. #include <cstdio> inline int Max(int x, i…
洛谷 P4593 [TJOI2018]教科书般的亵渎 神仙伯努利数...网上一堆关于伯努利数的东西但是没有证明,所以只好记结论了? 题目本质要求\(\sum_{i=1}^{n}i^k\) 伯努利数,\(B_0=1,B_i=-\frac{\sum_{j=0}^{i-1}C_{n+1}^jB_j}{i+1}(i>0)\) 就这玩意(什么鬼)... 然后就神仙的有\(\sum_{i=1}^{n}i^k=\frac{\sum_{i=1}^{k+1}C_{k+1}^{i}B_{k+1-i}(n+1)^{i…
题面 Bzoj 洛谷 题解 显然,如果让你查询整个数列的最大异或和,建一颗\(01Trie\),每给定一个\(p\),按照二进制后反方向跳就行了(比如当前二进制位为\(1\),则往\(0\)跳,反之亦反). 但是现在要支持在最末尾插入和区间查询,将这颗\(Trie\)可持久化一下就好了(可持久化\(Trie\)敲板) #include <cstdio> #include <cstring> #include <algorithm> using std::min; usi…
题目描述 给定一棵n 个点的树,每条边上都有一个权值.现在按顺序删掉所有的n-1条边,每删掉一条边询问当前有多少条路径满足路径上所有边权值异或和为0. 输入输出格式 输入格式: 第一行一个整数n. 接下来n-1 行,每行三个整数ai,bi, zi,满足1<= ai, bi <=n,表示树上编号为ai 的点和编号为bi 的点中间连有一条权值为zi 的边. 接下来一行n-1 个整数,两两之间有一个空格隔开,表示一个1~ n- 1 的排列,表示n - 1 条边的删边顺序. 输出格式: 输出n 行,每…
题目链接 洛谷P4593 题解 orz dalao upd:经典的自然数幂和,伯努利数裸题 由题我们只需模拟出代价,只需使用\(S(n,k) = \sum\limits_{i = 1}^{n} i^{k}\)这样的前缀和计算 我不知道怎么来的这样一个公式: \[(n + 1)^{k} - n^{k} = \sum\limits_{i = 1}^{k} {k \choose i}n^{k - i}\] 这玩意怎么来的呢? 左边为\((n + 1)^k - n^k\),\((n+1)^k\)可以看做…
题目链接 洛谷P4591 题解 设\(f[i][j]\)表示前\(i\)个串匹配到位置\(j\)的方案数,匹配一下第\(i\)个串进行转移即可 本来写了\(hash\),发现没过,又写了一个\(KMP\),依旧\(WA\),无奈去翻题解,竟然要取模??!! 题面怎么不讲啊,, #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath&…