树
Vectorxj
这个作者很懒,什么都没留下…
展开
-
POJ 2528
离散 线段树 涂色 注意 如果 有两个坐标之差大于1则要添加其中间值!!! 详见数据: 1 5 1 4 2 6 8 10 3 4 7 10附带码#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#include<algorithm>#define N 200010using names原创 2016-03-29 20:39:31 · 340 阅读 · 0 评论 -
BZOJ 2002 [LCT]
2002: [Hnoi2010]Bounce 弹飞绵羊 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从原创 2016-07-13 00:57:47 · 468 阅读 · 0 评论 -
[构造]AGC005C - Tree Restoring
DescriptionDescription给出一个数组aa。 要求构造一颗树,使节点uu距离最远的点的距离为aua_u。SolutionSolution这颗树的直径d=maxni=1aid=max_{i=1}^n{a_i}。 可以通过对dd奇偶性的分类讨论,把在直径上节点的值计算掉。 然后其他的点的值一定大于等于在直径上的点的值的最小值。 等号可不可取也是要分奇偶性讨论的。#include原创 2017-10-22 13:18:47 · 542 阅读 · 0 评论 -
CC COT5 [线段树][Treap]
DescriptionDescription维护一个Treap,支持三种操作0 k w0~k~w:插入一个关键字为kk,权值为ww的点。1 k1~k:删除一个关键字为kk的点。2 ku kv2~k_u~k_v:返回关键字分别为kuk_u和kvk_v两个结点的距离。 SolutionSolution这道题寒假就做到了。。一直不会QAQ 考虑Treap是怎么建的。 对所有键值排序后,以权值最原创 2017-09-14 21:30:52 · 414 阅读 · 0 评论 -
[杂题]AGC015C - Nuske vs Phantom Thnook
DescriptionDescription给定一张网格图。图中的两个黑点右边当且仅当相邻。 求子网格图(x1,y1,x2,y2)(x_1,y_1,x_2,y_2)中联通块的个数。 保证两个点之间不连通或只存在一条简单路径。SolutionSolution森林的联通块个数=点数-边数。#include <bits/stdc++.h>using namespace std;const int N原创 2017-10-23 12:21:34 · 313 阅读 · 0 评论 -
[容斥原理][Meet-in-middle][Matrix-Tree定理] SRM551 Div1 Hard SweetFruits
SolutionSolutionSolution将原问题分成两个子问题。从所有甜的水果中选出kkk个水果作为真甜的,要求他们甜度之和不超过maxSweetnessmaxSweetnessmaxSweetness的方案数cntkcntkcnt_k令nnn为甜的水果数目,求出组成的树的方案数treektreektree_k使得nnn个甜的水果中恰有kkk个水果为真甜的。 ans=∑k=0...原创 2018-01-04 09:01:12 · 525 阅读 · 0 评论 -
[树形DP] SRM 598 Div1 Hard TPS
SolutionSolution可以枚举根,在根放一个信标,就可以区分出深度不同的点。若在节点uu放信标,则可以区分出点vv是否在uu内。可以考虑从disu,v=depu+depv−2deplca(u,v)dis_{u,v}=dep_u+dep_v-2dep_{lca(u,v)}求出deplca(u,v)dep_{lca(u,v)},再与depudep_u比较即可。若节点uu的两个子树原创 2018-01-07 18:35:21 · 347 阅读 · 0 评论 -
[后缀自动机][树上启发式合并] LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度
SolutionSolutionSolutionO(nn−−√logn)O(nnlogn)\mathcal{O}(n\sqrt n\log n)的莫队连500005000050000都过不了qwq。%%%gjghfdgjghfd教我SAM+树上启发式合并的做法。 每两个后缀的贡献会在LCA处统计到。 一个暴力的想法就是枚举LCA,那就只需要考虑子树中的点对。有实际贡献意义的就...原创 2018-03-07 10:23:30 · 496 阅读 · 0 评论 -
[DP][分治] 51Nod 1934 受限制的排列
SolutionSolutionSolution一个显然的想法就是去找最小的那个数。 最小的数的 lll 和 rrr 就应该是 111 和 nnn 。 因为这是一个排列,我们把问题从最小值处 pospospos 分开,得到两个一样的问题 (1,pos−1)(1,pos−1)(1,pos-1) 和 (pos+1,n)(pos+1,n)(pos+1,n) 。设区间长度为 lenlenlen ,...原创 2018-03-07 18:45:28 · 426 阅读 · 0 评论 -
[树的dfs] Codeforces 717 E. Paint it really, really dark gray
SolutionSolutionSolution又是这个idea。。。 大致就是自下向上调整每个点,把调整的媒介丢给父亲。 最后特判一下根就好了。#include <bits/stdc++.h>#define show(x) cerr << #x << " = " << x << endlusing namespace...原创 2018-02-23 15:45:25 · 252 阅读 · 0 评论 -
[平等博弈][SG函数][字典树合并] BZOJ 4730: Alice和Bob又在玩游戏
SolutionSolutionSolution记SuSuS_u为uuu到根的链的子树的SG函数值的集合。 考虑从子树转移到根。 一种是去掉根,就是把所有子树异或起来。 一种操作在子树内,相当于把子树的SSS异或上子树的SG异或和。 集合异或上一个数可以打标记。 集合的合并可以用字典树合并。 求mexmex\text{mex}可以二分。#include <bits/s...原创 2018-02-24 19:23:04 · 433 阅读 · 0 评论 -
[NTT][DP][树链剖分][分治] LOJ #6289. 花朵
SolutionSolutionSolutionfu,0/1,ifu,0/1,if_{u,0/1,i}表示uuu子树中选了iii个点,uuu选不选的答案。 转移显然就是一个卷积的形式。 考虑重链剖分。 先把轻儿子卷到根,这样只需要考虑重链。 再考虑重链上的DP。 考虑头尾选不选gu,0/1,0/1gu,0/1,0/1g_{u,0/1,0/1}。这也是个卷积,可以分治+FFT。#i...原创 2018-03-05 16:48:57 · 883 阅读 · 0 评论 -
BZOJ 4034 [树链剖分][线段树]
如果在一棵树上求两个节点间路径的最大值最小值权值和等等,并且还支持修改某一段路径的权值等等,光靠线段树是不够的,这是就需要树链剖分,将一棵树转化成线段,然后求解。For instance, BZOJ 4034: [HAOI2015]T2 Description 有一棵点数为 N 的树原创 2016-07-05 17:02:31 · 548 阅读 · 0 评论 -
BZOJ 1012 [线段树]
1012: [JSOI2008]最大数maxnumber 现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数原创 2016-05-24 14:14:16 · 405 阅读 · 0 评论 -
POJ 1988
带权并查集#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#define N 100010using namespace std;int f[N],low[N],size[N],n;//f means the lowestchar get_char(){ int cnt=0;char c=ge原创 2016-03-27 21:19:55 · 504 阅读 · 0 评论 -
树状数组的三种操作
直接贴代码一、改点求段 namespace BIT { #define N 100000 #define lowbit(a) ((a)&(-a)) int c[N],num; void init(int n){num=n;} inline void add(int x,int a) { int xx=x;原创 2016-03-27 13:32:38 · 1295 阅读 · 0 评论 -
POJ 2513
字典树+并查集判断是否联通+欧拉回路#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#define MAX 2500000using namespace std;int n,m,cnt=0,num=0,number[MAX],f[MAX];char str[50],s1[25],s2[25];inli原创 2016-03-27 21:19:10 · 467 阅读 · 0 评论 -
POJ 2236
并查集#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#include<cmath>#define N 1010using namespace std;int f[N],n,d;bool vis[N];struct point{ int x,y;}p[N];#define sqr(a)原创 2016-03-27 21:18:01 · 494 阅读 · 0 评论 -
POJ 3253
Huffman树 详见http://blog.csdn.net/shuangde800/article/details/7341289然而我用小根堆过的 跟合并果子一样#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;long long i,j,k,m,n,a原创 2016-03-27 21:17:11 · 452 阅读 · 0 评论 -
POJ 3321
DFS将树转变成树状数组,前向星存图void dfs(int x){ l[x]=cnt; for(int i=head[x];i!=-1;i=node[i].next) cnt++,dfs(node[i].to); r[x]=cnt; return ;}接下去就是树状数组改点求段#include<cstdio>#include<cstdlib>#原创 2016-03-27 21:15:48 · 403 阅读 · 0 评论 -
BZOJ 2588 [可持久化线段树][lca]
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权。其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文。 Input 第一行两个整数N,M。 第二行有N个整数,其中第i个整数表示点i的权值。 后面N-1行每行两个整数(x,y),表示点x到点y有一条边。 最后M行每原创 2016-12-22 18:44:31 · 507 阅读 · 0 评论 -
[多项式ln][多项式exp][多项式求幂][生成函数][DP][FNT] BZOJ 3684: 大朋友和多叉树
SolutionSolutionSolution把DP写成生成函数的形式。f(x)=x+∑d∈Dfd(x)f(x)=x+∑d∈Dfd(x)f(x)=x+\sum_{d\in D}f^d(x)设g(f(x))=xg(f(x))=xg\big(f(x)\big)=x,有g(f(x))g(x)==f(x)−∑d∈Dfd(x)x−∑d∈Dxdg(f(x))=f(x)−∑d∈Dfd(x)g(x)=x−∑...原创 2018-03-06 13:00:59 · 806 阅读 · 0 评论