BZOJ_5338_ [TJOI2018]xor_可持久化trie】的更多相关文章

BZOJ_5338_ [TJOI2018]xor_可持久化trie Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的收益. 问收益最大值是多少. Input 第一行两个整数N,K. 接下来N-1行每行三个正整数fr,to,dis,表示该树中存在一条长度为dis的边(fr,to). 输入保证所有点之间是联通的. N<=2…
BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的时候,为了方便就先算一下LCA的答案. //83472kb 3316ms #include <cstdio> #include <cctype> #include <algorithm> #define BIT 29 #define gc() getchar() #defi…
可持久化Trie模板题. 建两种可持久化Trie,每个点两棵,一棵对DFS求前缀和,一棵对祖先求前缀和. 或者树剖,不好写多少还多个log. #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) #define For(i,x) for (int i=h[x],k; i; i=nxt[i]) using namespace std; ; ]; ],nxt[N&l…
强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int tot,edges,tim; int cnt[N*33],ch[N*33][2],tree[N],seq[N],val[N],ba[N]; int fa[N],son[N],size[N],t…
题目分析: 很无聊的一道题目.首先区间内单点对应异或值的询问容易想到trie树.由于题目在树上进行,case1将路径分成两段,然后dfs的时候顺便可持久化trie树做询问.case2维护dfs序,对dfs序建可持久化的trie树.这样做的空间复杂度是O(nw),时间复杂度是O(nw). 代码: #include<bits/stdc++.h> using namespace std; ; int n,q; int v[maxn]; vector<int> g[maxn]; vecto…
题面 BZOJ Sol 显然是要维护一个区域的 \(trie\) 树,然后贪心 区间 \(trie\) 树??? 可持久化 \(trie\) 树??? 直接参考主席树表示出区间的方法建立 \(trie\) 树,然后做差就好了 巨简单 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; t…
题目链接 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…
题目描述 现在有一颗以 1 为根节点的由 n 个节点组成的树,树上每个节点上都有一个权值 \(v_i\).现在有 Q 次操作,操作如下: 1 x y :查询节点 x 的子树中与 y 异或结果的最大值. 2 x y z :查询路径 x到 y 上点与 z 异或结果最大值 输入格式 第一行是两个数字 n , Q . 第二行是 n 个数字用空格隔开,第 i 个数字 \(v_i\) 表示点 i 上的权值. 接下来 n−1 行,每行两个数, x,y ,表示节点 x 与 y 之间有边. 接下来 Q 行,每一行…
Tree Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Total Submission(s): 1643    Accepted Submission(s): 461 Problem Description   Zero and One are good friends who always have fun with each other. This time, t…
看到异或就去想前缀和(⊙o⊙) 这个就是正反做一遍最大异或和更新答案 最大异或就是很经典的可持久化Trie,从高到低贪心 WA: val&(1<<(base-1))得到的并不直接是1/0 #include<bits/stdc++.h> #define ll long long #define N 400005 using namespace std; inline int read(){ ,f=;char ch=getchar(); ;ch=getchar();} *x+c…