ACM进阶之树论
NYIST_TC_LYQ
这个作者很懒,什么都没留下…
展开
-
POJ3246-Balanced Lineup,好经典的题,做法和HDU-I hate it 一样~~
Balanced LineupTime Limit: 5000MS Memory Limit: 65536K Case Time Limit: 2000MSDescriptionFor the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) alwa原创 2016-04-14 14:51:53 · 942 阅读 · 0 评论 -
Codeforces Round #430 (Div. 2) C+D补题记录
C. Ilya And The Tree题意有点迷,虽然很快猜出来正确题意但却一时无从下手的感觉。题意:给你一颗树,每个节点都有一个值。定义每个点的beauty为这个点到1号节点这条路径上点值的gcd。现在可以任意修改这条路径上的一个值为0,求每个点的最大beauty,每个点的求解都是独立的。思路:既然可以修改路径上的一个点的值为0,那么当前点的最大beauty即这条路径上所有数的原创 2017-09-01 17:35:10 · 298 阅读 · 0 评论 -
2015 ACM/ICPC Asia Regional Shenyang OnlineHDU-5458 Stability
Stability啊,极其恶心的题。Tarjan缩点+树剖+LCA+线段树题意:定义两个点之间的稳定度为一个点到另外一个点必须经过的边的条数。给你一个图,Q次操作,每次删除一条边或者查询两个点之间的稳定度。正向考虑根本无法解决,因为有动态删边的过程,查询两个点的ans几乎就是O(n)。所以我们要反向考虑,题目保证最后的图联通,即最后的图可能是一棵树或者存在环,我们知道一个环中的点的原创 2017-09-12 13:38:38 · 417 阅读 · 0 评论 -
Codeforces Round #363 (Div. 1) B. Fix a Tree
B. Fix a Tree去年暑假集训时候做的题,一下子没AC,看着它躺在CF右边列表里强迫症又犯了。题意:给你n个点,每个点有一个父亲节点p[i],代表i与p[i]相连,问最少改变多少个点的p[i]使其变成一棵树。看样例大概就能猜出来是并查集,确实,去年也是这样想的,不过代码却写的极其丑陋。今天再看,发现只有两种情况需要讨论,一种是孤立点,一种是成自环的情况,解决这两种情况就行了原创 2017-09-28 20:43:01 · 376 阅读 · 0 评论 -
NYOJ-117/atcoder ARC 75-E - Meaningful Mean 求逆序数。 树状数组存模板!(原模板已更正)
求逆序数时间限制:2000 ms | 内存限制:65535 KB难度:5 题意:中文题。本来用权值线段树写的,但nyoj判题机3s能当1s用,成功TLE。之前写过一个树状数组求逆序数的板子,今天发现有点点小问题,于是删除了,以这篇作为新的总结!对之前被误导的表示深深的歉意。树状数组:注意离散化const int N=1e6+10;inline原创 2017-10-07 19:37:32 · 428 阅读 · 0 评论 -
HDU-5934 Bomb 缩点
Bomb下午模拟了一波ccpc杭州站,结果崩的不行,C题被卡精度,这题一眼过去以为是费用流,结果在费用流的道路上一去不复返。 为什么费用流不行呢,因为无法在边上赋边权,每条边被经过多次,可能会多次统计,然后各种改,最后发现没法解决。也是加强了对网络流的理解吧。赛后结束队友惊呼是强连通缩点。。。。因为写流的时候用到了bitset传递闭包,索性用bitset传递闭包,然后用并查原创 2017-09-29 17:50:37 · 379 阅读 · 0 评论 -
bzoj-3685 普通van Emde Boas树 权值线段树+快读!
普通van Emde Boas树 题意不再赘述见题面:设计数据结构支持:1 x 若x不存在,插入x2 x 若x存在,删除x3 输出当前最小值,若不存在输出-14 输出当前最大值,若不存在输出-15 x 输出x的前驱,若不存在输出-16 x 输出x的后继,若不存在输出-17 x 若x存在,输出1,否则输出-1 数据范围和操作数都是1原创 2017-09-21 13:43:53 · 399 阅读 · 0 评论 -
BZOJ-3207 花神的嘲讽计划Ⅰ ,hash+可持久化线段树
花神的嘲讽计划Ⅰ 昨天才看懂的可持久化线段树,被这题坑了一天。题意:相当于给你长度为n的主串,M次查询,每次查询一个区间中长度为k的子串是否出现过。因为长度k是确定的,我们把原来的数列所有长度为k的子序列hash然后用可持久化线段树保存起来,用大佬的话讲就是预处理出来的hash值扔进主席树里,查询即可。大致就是这样,考虑到数据范围,我把所有的hash值再进行了hash一波,这样我们原创 2017-09-21 13:55:50 · 376 阅读 · 0 评论 -
HDU-5919 Sequence II 主席树二分
Sequence II题意:给你n个数,q次查询,每次查询一个区间,求这个区间的不同数的最中间的那个的第一次出现的位置。主席树裸题吧。查询区间不同数的个数模板然后嵌套个二分,二分答案mid,判断[l,mid]之间不同数的个数是否大于等于(k+1)/2,是则更新右端点,反之更新左端点,注意强制在线的左端点不能变,另外用一个变量表示左端点,每次更新它即可。 const int N=2e5+原创 2017-10-08 19:27:38 · 361 阅读 · 0 评论 -
light oj-1269 - Consecutive Sum 字典树动态静态都能A
1269 - Consecutive Sum自己犯了一个shab错误结果debug半小时。。题意:n个数,要你从这n个数中分别找两个区间,使得区间内的数异或值最大和最小。思路:字典树异或裸题,以前没做过这种同时求最大最小值的,于是板子来了一发。把每个数的前缀异或和扔进字典树,然后查找只需扫一遍过去,先把当前值的前缀异或和从字典树中删去,然后查找最小值只需将当前位置的前缀异或和的原创 2017-10-02 21:20:13 · 354 阅读 · 0 评论 -
bzoj-4627 [BeiJing2016]回转寿司 hash+权值线段树
4627: [BeiJing2016]回转寿司 题意:给你n个数,求有多少个子序列的和在[l,r]之间。先求一个前缀和,那么区间和直接用两个前缀相减即可,那么要满足条件:lconst int N=3e5+10;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(原创 2017-10-04 14:09:21 · 333 阅读 · 0 评论 -
划分树总结! 例题:POJ-2104/HDU-2665
划分树 本来是学主席树的,可怜我等巨弱观群巨博客难解fotle主席的思想精髓。于是学了一下划分树,嗯,花了一下午时间理解build(其实自己模拟一遍就通了),我很难理解为什么划分树会看不懂而能学会主席树。唉,学业有先后术业有专攻,斯已矣。其实思想不难理解,代码的话找个样例模拟一遍然后就通了。 ++划分树+++。 本人比较懒省事于是就学了二维数组式的风格。 1.sor原创 2017-02-23 17:39:37 · 509 阅读 · 0 评论 -
HDU-3065 病毒侵袭持续中 AC自动机!
病毒侵袭持续中 上一题是求出现多少病毒输出病毒序号,而这题输出每个病毒出现的次数。这题有字典树基础都能做出来,把叶子节点用相应的编号标记起来,匹配的时候遍历到叶子节点用一个数组把次数存起来就行了。 有了前几题的教训直接用静态树做用C++交,果然不会错!const int N=129;char str[2000001],s[1001][55],v[1001];int h原创 2017-01-13 08:58:30 · 546 阅读 · 0 评论 -
Light OJ-1082 - Array Queries,线段树区间查询最大值
1082 - Array QueriesTime Limit: 3 second(s)Memory Limit: 64 MBGiven an array with N elements, indexed from 1 to N. Now you will be given some queries in the form I J, your ta原创 2016-04-28 13:48:30 · 871 阅读 · 3 评论 -
POJ-3468A Simple Problem with Integers,线段树区间更新查询
A Simple Problem with IntegersTime Limit: 5000MS Memory Limit: 131072K Case Time Limit: 2000MSDescriptionYou have N integers, A1, A2, ... , AN.原创 2016-04-25 21:49:04 · 1392 阅读 · 0 评论 -
树链剖分-专题
树链剖分 闲来无事刷专题。树链剖分解决将树转化成线性(链)结构的求树上两点间极值或路径求和问题,转化成链状借助数据结构来快速求解。主要根据两个性质将树分为轻重链。详细:树链剖分原理树剖部分主要两个dfs,然后重点在lca和线段树的操作上。 这里主要将专题写个总结,没事多刷题。HDU-3966 Aragorn's Story题意:一棵树,每次更新一条路径上的点原创 2017-09-10 18:38:53 · 370 阅读 · 0 评论 -
2017 Wuhan University Programming Contest (Online Round) D. Events,线段树区间更新+最值查询!
D. Events 线段树区间更新查询区间历史最小值,看似很简单的题意写了两天才写出来。 题意:n个数,Q次操作,每次操作对一个区间[l,r]的数同时加上C,然后输出这段区间的历史最小值。 思路:在线段树区间更新最值查询的基础上再用一个变量表示历史最小值,每次更新只需对当前最小值更新然后用当前最小值更新历史最小值。细节问题很不好处理,可能会有重复多次更新某个区间但是其下的子节原创 2017-04-12 13:08:57 · 378 阅读 · 0 评论 -
HDU-5423 Rikka with Tree。树深搜
Rikka with Tree 题意:给出树的定义,给出树相似的定义和不同的定义,然后给出一棵树,求是否存在一颗树即和其相似又与其不同。存在输出NO,不存在输出YES。 思路:以1号节点为根节点,我们观察到一颗树如果不存在这种树即与其相似又与其不同,那么这棵树要么所有节点的深度都不一样,要么有深度一样的并且他们的父节点都一样,后来想想,如果当前节点的父节点有多个儿子,那么当前节点则不能原创 2017-04-12 13:27:13 · 379 阅读 · 0 评论 -
HDU1754-I Hate It,线段数水题~~2016.4.11
I Hate It Time Limit: 9000/3000 MS (Java/Others)原创 2016-04-11 13:17:30 · 347 阅读 · 0 评论 -
NYOJ-116士兵杀敌(二),树状数组~~
士兵杀敌(二)时间限制:1000 ms | 内存限制:65535 KB难度:5描述南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。原创 2016-04-09 17:04:51 · 568 阅读 · 0 评论 -
杭电ACM省赛集训队选拔赛之热身赛-How Many Tables,并查集模板题~~
created at 2016.4.7-21:12原创 2016-04-07 20:56:08 · 937 阅读 · 0 评论 -
HDU1166-敌兵布阵,线段数模板题~~
一个结构体加一个构建函数加一个插入函数加一个查询函数,,,,此之谓线段数。。。。。。原创 2016-03-19 11:01:55 · 477 阅读 · 0 评论 -
NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询
RMQ with Shifts时间限制:1000 ms | 内存限制:65535 KB难度:3 -> Link1原创 2016-07-13 10:56:48 · 565 阅读 · 0 评论 -
POJ3630/HDU-1671 Phone List,字典树静态建树!
Phone List POJ动态建树TLE了~~~ 题意:拨打某个电话时可能会因为和其他电话号码的前几位重复而导致错误,现在给出一张电话单,求是否有某个电话是其他电话的前缀。是则输出NO,否则输出YES。 思路:字典树模板题了,但有一个动态建树每次都要清空内存这个很重要,很容易导致MLE了。这个题插入和查找可以放在一起,这便是字典树的强大之处。struct T原创 2017-01-11 09:30:15 · 464 阅读 · 0 评论 -
HDU-4825 Xor Sum,字典树好题!
Xor Sum 一遍A了之后大呼一声好(keng)题!debug了两小时~~~~百度之星资格赛,可以。 题意:给你一个n个元素的数组,m次查询,每次输入一个数k要求从数组中找到一个数与k异或值最大,输出这个数。 思路:因为拉的字典树专题,所以自然想到用字典树去想思路,手推了一下样例果然发现规律了,把这些数的二进制全部竖着列出来,不足高位补0,然后每次比较比较一个数原创 2017-01-11 16:34:38 · 706 阅读 · 0 评论 -
POJ-3481 Double Queue,Treap树和set花式水过!
Double Queue 本打算学二叉树,单纯的二叉树感觉也就那几种遍历了, 无意中看到了这个题,然后就花了两天时间又去学了学Treap树,真的不好理解,真应该从基础开始的,但我比较倔强,看到这题一定要先做了再说。上午和某公众号交流了一下,初学,不明白为什么要借助随机优先值来修正,而这题本身自带优先值,为什么不能用这个来修正呢,给出的回答是:为了保证平衡,因为键值生成的BST树有很多种形态原创 2017-01-16 17:24:39 · 762 阅读 · 0 评论 -
HDU-5536 Chip Factory,又见字典树,好题+1!
Chip Factory 题意:一个n个数的数列,求三个数其中两个数的和与另外一个数的异或值最大,输出这个最大值。 思路:和前面那个百度之星资格赛HDU4825的类似,多了两个过程,一个是枚举和,另一个是删除过程,第一次写删除操作,还一遍A了,小激动。 会不会是后台水,东北师范官方没有给出标准测试数据,也就是说这数据是hdu YY的,我猜是这样,碰到过类似的情况,错误的代原创 2017-01-12 17:06:26 · 724 阅读 · 0 评论 -
HDu-1247 Hat’s Words,字典树裸模板!
Hat’s Words 题意:给出一张单词表求有多少个单词是由单词表里的两个单词组成,可以重复!按字典序输出这些单词。 思路:先建一个字典树,然后枚举每个单词,把每个单词任意拆分两部分然后查找。 目测数据不强,开始不知道单词长度都不敢下手了。。struct tree{ bool f; tree *next[N]; tree() {原创 2017-01-12 17:07:23 · 324 阅读 · 0 评论 -
HDU-1251 统计难题,字典树或者map!
统计难题 很久就看过这个题了,但不会~~~不会~~ 题意:给出一张单词表,然后下面有若干查询,每次给出一个单词,问单词表中是否存在以这个单词为前缀的单词,输出数量。本身也是自身的前缀。只有一组数据! 思路:用gets或输入字符都行。如果输入字符可以用map存图,维护每个单词的所有前缀,直接查找就行。要么就用字典树建图,路径每经过一次就加1,如果是新节点直接附原创 2017-01-12 17:07:57 · 432 阅读 · 0 评论 -
HDu-2896 病毒侵袭,AC自动机模板题!
病毒侵袭 模板题,不多说了。。 题意:n个不同的字符串分别代表病毒特征,给出m次查询,每次一个字符串(网址),求这个字符串中有几个病毒特征,分别从大到小输出编号,最后输出所有的带病毒网址个数。格式请看样例。 思路:典型AC自动机模板题,建一个Trie树,叶节点赋病毒的编号,然后依次匹配,用set存入编号即可,如果不带病毒不用输出来。这题很容易MLE,动态建树释放内存,所原创 2017-01-12 17:17:57 · 438 阅读 · 0 评论 -
POJ-1442 Black Box,treap名次树!
Black Box 唉,一天几乎就只做了这道题,成就感颇低啊! 题意:有一系列插入查找操作,插入每次在有序数列中插入一个数,保证插入后数列还是有序,初始数列为空,每次查询一个排名为i的数,第i次查询排名为i的数。给你两个数列,第一个是插入数的顺序,第二个是每次查询发生在插入第U(i)个数之后。具体看样例,说实话我也理解了挺久,数列1 2 6 6 表示的是第一次查询是在插入第一个原创 2017-01-17 16:48:36 · 722 阅读 · 0 评论 -
HDU-4612 Warm up,tarjan求桥缩点再求树的直径!注意重边
Warm up 虽然网上题解这么多,感觉写下来并不是跟别人竞争访问量的,而是证明自己从前努力过,以后回头复习参考! 题意:n个点由m条无向边连接,求加一条边后桥的最少数量。 思路:如标题,tarjan算法求出所有的桥,然后连通的缩成点,用桥连接这些点,很容易发现这是一颗生成树,我们再加一条边必然成环,要使得桥的数量最少,就得使得这个环中的边最多。于是找这棵树最长的一条链。即树的原创 2017-03-07 23:34:00 · 804 阅读 · 0 评论 -
Timus 1329. Galactic History。LCA最近公共祖先或dfs递归离线处理!
1329. Galactic History 比赛的时候看到学弟A了这题然后跟榜做,结果在LCA的道路上一去不复返,这个题是很像LCA求最近公共祖先的,不过三个人都没学过LCA,只能拿着资料看着像然后就打上去,结果debug半天,真是吃鸡,边学边做。 题意:n个点,接下来n行每行每个u,v,表示v是u的父节点。v=-1表示u是祖先节点。然后q次查询,每次一个u,v。如果u是v所在的原创 2017-04-14 09:26:24 · 409 阅读 · 0 评论 -
Timus OJ 1056. Computer Net
http://acm.timus.ru/problem.aspx?space=1&num=1056时隔大半年没刷题,纪念一下,为我校即将到来的第四届校赛做准备。题意:给你一棵树,求树的重心。思路:求出树的直径,然后找中间一点或两点就行。网上应该有求树的重心模板,但只知道求树的直径,于是自己在找直径的基础上记录了一下路径再找这条路径的中点。代码奇丑预警:#include&lt...原创 2018-12-29 20:55:26 · 390 阅读 · 0 评论