图论——树
JeremyGJY
然而并没有什么好说的
展开
-
树的最大独立集
最大的独立集:任意选择一些点使得任意两个点之间没有连接 所以可以得到以下两个条件:1.父亲和儿子不能连接在一起 2.因为如果选择了父亲就不能选择儿子和爷爷节点所以如果选择父亲的话爷爷的最大值就是父亲的最大值,由1得到爷爷的最大值为所有儿子的和或者所有孙子的和加上自己。 其中d为最大值,s为节点i的所有儿子的编号,gs为所有i的孙子节点 得到以下的dp函数1 2 3 4 5 6 7原创 2015-02-24 22:15:29 · 914 阅读 · 1 评论 -
【AC自动机】[HDU2896]病毒侵袭
题目大意:多组询问的AC自动机 这里注意一下在HDU2222的基础上修改一下不要把FLAG清零,同时用一个数组记录一下那些出现过就行了#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <iostream>using namespace std;#define rep(i,k)原创 2015-12-22 13:33:07 · 472 阅读 · 0 评论 -
【AC自动机】[HDU3065]病毒侵袭持续中
本来很简单的一道题目,和病毒侵袭差不多,只不过把bool ans 改成了int ans 然后统计一下次数就好了, 但是题目中居然没有出现多组数据的提示。。。。Wa了N次,居然因为没有多组数据。。。#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <iostream>using na原创 2015-12-22 14:06:42 · 580 阅读 · 0 评论 -
【可持久化线段树】【主席树】[BZOJ 3295]动态逆序对
对于序列A,它的逆序对数定义为满足ij,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。这里可以发现对于每一个数字可以有两种做法第一种就是先建好树然后每一次删除询问在他之前有多少个比他大的,询问有多少个比他小的在他之后,然后减去(不推荐该做法)另一种做法就是首先预处理出来左边有多少个比他大原创 2016-01-24 15:18:21 · 732 阅读 · 0 评论 -
【可持久化线段树】【主席树】[HDU4417]Super Mario
Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory. Now the poor princess is in trouble again and Mario needs to save his lover. We regard the road原创 2016-01-24 15:23:49 · 765 阅读 · 0 评论 -
【AC自动机】[UESTC 554][USACO 2012]Video Game Combos
题目大意:给定有ABC组成的串n个,然后请你生成一个长度为K的串求给定的串在生成串中最多被匹配时的次数3 7ABACBABACBOUTPUT FORMAT:* Line 1: A single integer, the maximum number of points Bessie can obtain.SAMPLE OUTPUT (file原创 2015-12-23 13:55:04 · 853 阅读 · 1 评论 -
【树】【数论】[BZOJ1005][HNOI2008]明明的烦恼
题目描述自从明明学了树的结构,就对奇怪的树产生了兴趣…… 给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树?样例输入3 1 -1 -1样例输出2题目解析首先我们根据prufer数列可以知道任意一棵无根树可以表示为任意一个长度为n−2n-2的串并且有以下的性质任意一点的度为did_i那么该数字将会在数列中出现di−1d_i-1次,那么我们可以知道该数原创 2016-02-02 18:05:59 · 2229 阅读 · 3 评论 -
【线段树】【树】[BZOJ4293][HYSBZ4293][PA2015]Siano
题目描述注:此题为BZOJ的权限题目Description农夫Byteasar买了一片n亩的土地,他要在这上面种草。 他在每一亩土地上都种植了一种独一无二的草,其中,第i亩土地的草每天会长高a[i]厘米。 Byteasar一共会进行m次收割,其中第i次收割在第d[i]天,并把所有高度大于等于b[i]的部分全部割去。Byteasar想知道,每次收割得到的草的高度总和是多少,你能帮帮他吗?Input原创 2016-02-19 23:38:32 · 1355 阅读 · 1 评论 -
【线段树】【树】【网络流】[UOJ#77]A+B Problem
题目描述 感谢geng给我了正确的数据范围题目解析首先我们可以发现如果我们不考虑有奇怪的格子,那么显然我们有ans=∑黑色的格子bi+∑白色的格子wians=\sum_{黑色的格子}b_i+\sum_{白色的格子}w_i那么ans=∑i=1nwi+bi−∑i=1nmin{wi,bi}ans=\sum_{i=1}^nw_i+b_i-\sum_{i=1}^n\min\{w_i, b_i\}那么我们原创 2016-03-19 12:13:53 · 1499 阅读 · 1 评论 -
【树】【平衡树】Splay自顶向下模板
操作1插入x 操作2删除x 操作3查询x排名 操作4查询排名为x的数 操作5查询x的前驱 操作6查询x的后继#include <cstdio>#include <cstring>#include <iostream>using namespace std;struct node{ int sz, val; node *ch[2]; node(){ch[0]原创 2016-03-10 13:49:26 · 693 阅读 · 1 评论 -
【最小生成树】【并查集】[USACO2016 金组]Fenced In
题目描述Farmer John has realized that many of his cows are strangely agoraphobic (being fearful of large open spaces). To try and make them less afraid of grazing, he partitions his large field into a numb原创 2016-03-12 16:12:48 · 1064 阅读 · 1 评论 -
【AC自动机】[HDU2222]Keywords Search
这题根本没什么好说的完全模板题目#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <iostream>using namespace std;const int MAXN = 10000;struct State{ int fail, flag; int ch[原创 2015-12-22 13:31:10 · 420 阅读 · 0 评论 -
【可持久化线段树】[SPOJ COT]Count on a tree
题目大意:给定一棵树,然后询问连个节点间路径上的权值的第K小的权值大小 题目分析:和普通的第K大的可持久化线段树差距不大,但是要写个LCA可以发现Tree(a)+Tree(b)−Tree(LCA)−LCA(fa[LCA])Tree(a)+Tree(b)-Tree(LCA)-LCA(fa[LCA])就是两个节点之间的线段树了,然后按照普通的可持久化线段树搞一搞就好了#include <cstdio>原创 2015-11-27 13:47:04 · 544 阅读 · 0 评论 -
【Treap】[BZOJ 3224]Tyvj 1728 普通平衡树
平衡树的入门题目,也可以用Treap来实现,我觉得Treap的核心就是那个rand()了用来保证树不退化成链,同时还是有平衡树的特性。。总体来说我觉得比较好些,而且比较快#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <cctype>#include <iostream>usi原创 2015-06-07 11:36:08 · 610 阅读 · 0 评论 -
【Treap】[BZOJ 3224]Tyvj 1728 普通平衡树 & 非旋转实现
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define maxn 2000005struct Treap{ Treap *l,*r; int fix,key,size; Treap(int key_){ fix = rand(); l原创 2015-06-07 16:17:25 · 926 阅读 · 0 评论 -
【Treap】[HNOI 2002]营业额统计
很简单的基础题目了,就是用Treap重新写了一下练习Treap用的,注意特殊处理有没有前驱和后继的情况,不然要RE#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define maxn 2000005struct Treap{ Treap *l,*r; int fix,key,s原创 2015-06-08 02:03:34 · 560 阅读 · 0 评论 -
【Treap】[NOI 2004]郁闷的出纳员
解析:这道题目就是个裸题 每次操作的时候正常维护就行了#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define maxn 2000005struct Treap{ Treap *l,*r; int fix,key,size; Treap(int key_){原创 2015-06-08 22:11:40 · 522 阅读 · 0 评论 -
【Treap】[BZOJ 1208]宠物收养所
题目描述:最近,阿Q开了一间宠物收养所。收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物。每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值。这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或原创 2015-06-09 19:00:02 · 488 阅读 · 0 评论 -
【Splay】[SGU 187]Twist and whirl - want to cheat
这道题真是我见过的最坑的平衡树的题目。。。。 time limit per test: 0.25 sec. memory limit per test: 4096 KB 这个也太小了吧! 题目大意就是有一个数列一开始是1-n然后给出l, r每次把当前第l到第r个逆序,然后输出n<=130000 m<=2000 首先我写了一个传统的东西,然后在24组TLE然后,从指针的Splay转换成数组原创 2015-06-11 13:57:02 · 441 阅读 · 0 评论 -
【可持久化线段树】[COCI]白雪公主(white)
题目描述: 白雪公主和N个小矮人住在森林里。每天早上,矮人们排成一队出去挖矿的路上,白雪公主就负责给他们拍照,并把这些照片传到社交网络上去。 白雪每次都会拍很多照片,她要从中选出一些完美的照片。小矮人们都戴着不同颜色的 帽子。如果照片上小矮人们有一半以上人戴着相同颜色的帽子,则这张照片就算是完美的。 也就是说,如果照片上有K个人,如果有多于K/2的人带着相同颜色的帽子,则这张照片就是完美的。原创 2015-08-25 17:03:36 · 535 阅读 · 0 评论 -
【树链剖分】[BZOJ 4196]软件包管理器
实际上就是个树链剖分,每次询问自己需要的到根节点中有多少开/开了,然后根据需要输出然后线段树Update的时候改一下改成每次更新全部,直接覆盖就行,每次扫描出来的一段肯定是上面半段开下面半段不开(分成两段)或者全部都处于开或者关,因为在链上任意一个处于开启状态那么之前的必须也处于开始状态。就是这样。#include <cstdio>#include <algorithm>#include <cs原创 2015-07-23 16:43:36 · 460 阅读 · 0 评论 -
【最近公共祖先】[COCI]STOGOVI
首先可以定义每一个节点代表一种操作,那么我们需要知道的状态有{前一个状态的id,当前的栈顶元素}那么我们可以发现因为只是指向前面的元素,那么我们不需要考虑有环的问题(不存在),那么我们可以因为数据范围巨大,那么我们需要用LCA进行优化,同时我们发现如果弹出了,那么一定会变得更小(每个栈的序列是升序的)那么我们只要找到需要判断的两个重复的LCA节点到a和到b的中间所有节点的最小值(这个也可以用倍增弄看原创 2015-09-07 14:12:26 · 554 阅读 · 0 评论 -
【可持久化线段树】【树状数组】[ZOJ 2112]Dynamic Rankings
题目大意:带修改操作的区间第K大 首先可以发现因为只有在需要使用的时候才会新建节点那么最多有nlognnlogn个节点,那么只需要在更新的时候带上值域就可以不用进行离散化了,每一次就是和普通的树状数组那么进行更新,因为求得是区间的和(大概就是可持久化的原理)但是用树状数组来做每一个更新的时候就有了求前缀和的范围,每一次加起来就好了,其实和普通的树状数组差不多的。(注意是多组数据)#include原创 2015-11-27 14:01:24 · 888 阅读 · 1 评论 -
【树链剖分】[BZOJ 4196][NOI 2014]软件包管理器
题目描述: Linux用户和OSX用户一定对软件包管理器不会陌生。通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置。Debian/Ubuntu使用的apt-get,Fedora/CentOS使用的yum,以及OSX下可用的homebrew都是优秀的软件包管理器。你原创 2015-11-27 13:15:27 · 414 阅读 · 0 评论 -
【Trie】【树】[CQOI 2016]路由器(Route)
题目大意由于还没有拿到题目大概先说一下题意吧:首先给你一个空空的路由器,大家然后我们对于一个空的路由表有两种操作插入一个新的IP寻址方式查询一个IP在[L,R]中最终寻找到的IP被修改了多少次这里IP的寻找方式是这样给出的我们有A.B.C.D四位数字外加一个L,首先我们将A.B.C.D转换为二进制,然后从A开始比较L为如果和询问的IP转换成二进制如果前面L位可以匹配我们认为这个是成功匹配的但是如原创 2016-04-10 16:22:54 · 1236 阅读 · 1 评论